html - rails : Trying to push data from one table to another

标签 html ruby-on-rails controller crud parameters

在我的 Rails 应用程序中,我要求将 Approvals 中的参数复制到 Rotas

在索引页上单击指向 Push 操作的链接时,出现此错误:param 丢失或值为空:approval

我的批准索引页

<% if current_user.admin %>
<h1>Listing approvals</h1>

<% @approvals.each do |approval| %>  
<table>
  <tr>
    <th></th>
    <th>Sunday</th>
    <th>Monday</th>
    <th>Tuesday</th>
    <th>Wednesday</th>
    <th>Thursday</th>
    <th>Friday</th>
    <th>Saturday</th>
  </tr>

  <tr>
    <th>Louise</th>
    <td><%= approval.grid11 %></td>
    <td><%= approval.grid12 %></td>
    <td><%= approval.grid13 %></td>
    <td><%= approval.grid14 %></td>
    <td><%= approval.grid15 %></td>
    <td><%= approval.grid16 %></td>
    <td><%= approval.grid17 %></td>
  </tr>

  <tr>
    <th>Ruairi</th>
    <td><%= approval.grid21 %></td>
    <td><%= approval.grid22 %></td>
    <td><%= approval.grid23 %></td>
    <td><%= approval.grid24 %></td>
    <td><%= approval.grid25 %></td>
    <td><%= approval.grid26 %></td>
    <td><%= approval.grid27 %></td>
  </tr>

  <tr>
    <th>Gavin</th>
    <td><%= approval.grid31 %></td>
    <td><%= approval.grid32 %></td>
    <td><%= approval.grid33 %></td>
    <td><%= approval.grid34 %></td>
    <td><%= approval.grid35 %></td>
    <td><%= approval.grid36 %></td>
    <td><%= approval.grid37 %></td>
  </tr>

  <tr>
    <th>Conn</th>
    <td><%= approval.grid41 %></td>
    <td><%= approval.grid42 %></td>
    <td><%= approval.grid43 %></td>
    <td><%= approval.grid44 %></td>
    <td><%= approval.grid45 %></td>
    <td><%= approval.grid46 %></td>
    <td><%= approval.grid47 %></td>
  </tr>

  <tr>
    <th>Michael K</th>
    <td><%= approval.grid51 %></td>
    <td><%= approval.grid52 %></td>
    <td><%= approval.grid53 %></td>
    <td><%= approval.grid54 %></td>
    <td><%= approval.grid55 %></td>
    <td><%= approval.grid56 %></td>
    <td><%= approval.grid57 %></td>
  </tr>

  <tr>
    <th>Emily</th>
    <td><%= approval.grid61 %></td>
    <td><%= approval.grid62 %></td>
    <td><%= approval.grid63 %></td>
    <td><%= approval.grid64 %></td>
    <td><%= approval.grid65 %></td>
    <td><%= approval.grid66 %></td>
    <td><%= approval.grid67 %></td>
  </tr>

  <tr>
    <th>Stephen W</th>
    <td><%= approval.grid71 %></td>
    <td><%= approval.grid72 %></td>
    <td><%= approval.grid73 %></td>
    <td><%= approval.grid74 %></td>
    <td><%= approval.grid75 %></td>
    <td><%= approval.grid76 %></td>
    <td><%= approval.grid77 %></td>
  </tr>

  <tr>
    <th>Niamh</th>
    <td><%= approval.grid81 %></td>
    <td><%= approval.grid82 %></td>
    <td><%= approval.grid83 %></td>
    <td><%= approval.grid84 %></td>
    <td><%= approval.grid85 %></td>
    <td><%= approval.grid86 %></td>
    <td><%= approval.grid87 %></td>
  </tr>

  <tr>
    <th>Josh</th>
    <td><%= approval.grid91 %></td>
    <td><%= approval.grid92 %></td>
    <td><%= approval.grid93 %></td>
    <td><%= approval.grid94 %></td>
    <td><%= approval.grid95 %></td>
    <td><%= approval.grid96 %></td>
    <td><%= approval.grid97 %></td>
  </tr>

  <tr>
    <th>Aidan</th>
    <td><%= approval.grid101 %></td>
    <td><%= approval.grid102 %></td>
    <td><%= approval.grid103 %></td>
    <td><%= approval.grid104 %></td>
    <td><%= approval.grid105 %></td>
    <td><%= approval.grid106 %></td>
    <td><%= approval.grid107 %></td>
  </tr>

  <tr>
    <th>Courtney</th>
    <td><%= approval.grid111 %></td>
    <td><%= approval.grid112 %></td>
    <td><%= approval.grid113 %></td>
    <td><%= approval.grid114 %></td>
    <td><%= approval.grid115 %></td>
    <td><%= approval.grid116 %></td>
    <td><%= approval.grid117 %></td>
  </tr>
</table>
<% end %>

<table>
  <thead>
    <tr>
      <th>Week</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @approvals.each do |approval| %>
      <tr>
        <td><%= approval.week %></td>
        <td><%= link_to 'Approve This', approvals_push_path(:id => approval.id) %></td>
        <td><%= link_to 'Show', approval %></td>
        <td><%= link_to 'Edit', edit_approval_path(approval) %></td>
        <td><%= link_to 'Destroy', approval, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<% end %>

<%= link_to 'New Approval', new_approval_path %>

我的 ApprovalsController

class ApprovalsController < ApplicationController
  before_action :set_approval, only: [:show, :edit, :update, :destroy]
  before_filter :authenticate_user!

  respond_to :html

  def index
    @approvals = Approval.all
    respond_with(@approvals)
  end

  def push
    @approval = Approval.find(params[:id])
    @rotum = Rotum.find_by_id(@approval.rotumid)
    @rotum.update_attributes(push_params)
  end

  def show
    respond_with(@approval)
  end

  def new
    @rota = Rotum.find(params[:id])
    @approval = Approval.new
    respond_with(@approval)
  end

  def edit
  end

  def create
    @approval = Approval.new(approval_params)
    @approval.save
    respond_with(@approval)
  end

  def update
    @approval.update(approval_params)
    respond_with(@approval)
  end

  def destroy
    @approval.destroy
    respond_with(@approval)
  end

  private
    def set_approval
      @approval = Approval.find(params[:id])
    end

    def set_rotum
      @rotum = Rotum.find(:rotumid)
    end

    def approval_params
      params.require(:approval).permit(:week, :grid11, :grid12, :grid13, :grid14, :grid15, :grid16, :grid17, :grid21, :grid22, :grid23, :grid24, :grid25, :grid26, :grid27, :grid31, :grid32, :grid33, :grid34, :grid35, :grid36, :grid37, :grid41, :grid42, :grid43, :grid44, :grid45, :grid46, :grid47, :grid51, :grid52, :grid53, :grid54, :grid55, :grid56, :grid57, :grid61, :grid62, :grid63, :grid64, :grid65, :grid66, :grid67, :grid71, :grid72, :grid73, :grid74, :grid75, :grid76, :grid77, :grid81, :grid82, :grid83, :grid84, :grid85, :grid86, :grid87, :grid91, :grid92, :grid93, :grid94, :grid95, :grid96, :grid97, :grid101, :grid102, :grid103, :grid104, :grid105, :grid106, :grid107, :grid111, :grid112, :grid113, :grid114, :grid115, :grid116, :grid117, :rotumid)
    end

    def push_params
      params.require(:approval).permit(:grid11, :grid12, :grid13, :grid14, :grid15, :grid16, :grid17, :grid21, :grid22, :grid23, :grid24, :grid25, :grid26, :grid27, :grid31, :grid32, :grid33, :grid34, :grid35, :grid36, :grid37, :grid41, :grid42, :grid43, :grid44, :grid45, :grid46, :grid47, :grid51, :grid52, :grid53, :grid54, :grid55, :grid56, :grid57, :grid61, :grid62, :grid63, :grid64, :grid65, :grid66, :grid67, :grid71, :grid72, :grid73, :grid74, :grid75, :grid76, :grid77, :grid81, :grid82, :grid83, :grid84, :grid85, :grid86, :grid87, :grid91, :grid92, :grid93, :grid94, :grid95, :grid96, :grid97, :grid101, :grid102, :grid103, :grid104, :grid105, :grid106, :grid107, :grid111, :grid112, :grid113, :grid114, :grid115, :grid116, :grid117)
    end

    def rotum_params
      params.require(:rotum).permit(:week, :grid11, :grid12, :grid13, :grid14, :grid15, :grid16, :grid17, :grid21, :grid22, :grid23, :grid24, :grid25, :grid26, :grid27, :grid31, :grid32, :grid33, :grid34, :grid35, :grid36, :grid37, :grid41, :grid42, :grid43, :grid44, :grid45, :grid46, :grid47, :grid51, :grid52, :grid53, :grid54, :grid55, :grid56, :grid57, :grid61, :grid62, :grid63, :grid64, :grid65, :grid66, :grid67, :grid71, :grid72, :grid73, :grid74, :grid75, :grid76, :grid77, :grid81, :grid82, :grid83, :grid84, :grid85, :grid86, :grid87, :grid91, :grid92, :grid93, :grid94, :grid95, :grid96, :grid97, :grid101, :grid102, :grid103, :grid104, :grid105, :grid106, :grid107, :grid111, :grid112, :grid113, :grid114, :grid115, :grid116, :grid117)
    end
end

如有任何帮助,我们将不胜感激!

最佳答案

类似下面的问题: Param is missing or the value is empty user Rails 4Param is missing or the value is empty 您的问题似乎是由您在 Controller 中使用强参数的方式引起的。基本上,您不会在对 approvals_push_path 的请求中传递必需的 approval 字段,只需发送批准的 id

def push
  @approval = Approval.find(params[:id])
  @rotum = Rotum.find_by_id(@approval.rotumid)

  # Throws error, because there is no approval param in params
  @rotum.update_attributes(push_params)
end

为避免错误,您可以从 @approval 对象中选择要复制的字段:

def push
  @approval = Approval.find(params[:id])
  @rotum = Rotum.find_by_id(@approval.rotumid)

  # We have to select which attributes we want to copy.
  @rotum.update_attributes(attrs_for_push)
end

def attrs_for_push
  # Let's select only attributes we need.
  @approval.attributes.slice(:week, :grid11, :grid12, :grid13, :grid14, :grid15, :grid16, :grid17, :grid21, :grid22, :grid23, :grid24, :grid25, :grid26, :grid27, :grid31, :grid32, :grid33, :grid34, :grid35, :grid36, :grid37, :grid41, :grid42, :grid43, :grid44, :grid45, :grid46, :grid47, :grid51, :grid52, :grid53, :grid54, :grid55, :grid56, :grid57, :grid61, :grid62, :grid63, :grid64, :grid65, :grid66, :grid67, :grid71, :grid72, :grid73, :grid74, :grid75, :grid76, :grid77, :grid81, :grid82, :grid83, :grid84, :grid85, :grid86, :grid87, :grid91, :grid92, :grid93, :grid94, :grid95, :grid96, :grid97, :grid101, :grid102, :grid103, :grid104, :grid105, :grid106, :grid107, :grid111, :grid112, :grid113, :grid114, :grid115, :grid116, :grid117)
end

您可能希望将复制逻辑从 Controller 移动到模型或单独的实用程序服务对象。

ActiveRecord::AttributeMethods#attributes documentation .

关于html - rails : Trying to push data from one table to another,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31855478/

相关文章:

ruby-on-rails - ActiveRecord destroy_all

ruby-on-rails - 获取按唯一字段值分组的最新行

javascript - 如何在 JavaScript 中将图像标签打印到 Rails 资源中?

ruby-on-rails - 触发 rails controller 功能 - Paypal Website Standard IPN

authentication - 将数组从 AuthController 传递到 Laravel 5 中的登录 View

javascript - OnSubmit 返回在 Safari 中不起作用

javascript - 通过 jquery 提交表单删除提交输入变量

jquery - html 鼠标悬停在事件上,无法显示对话框

javascript - 虚拟键盘缩放网页

node.js - Express 中的数据库查询错误 : Router. use() 需要一个中间件函数,但得到一个未定义的