0

晚上好,我一直在试图弄清楚为什么当我提出 inspect.params 我得到 id => "id"

请参阅我的代码,用于从不更新属性的管理表单将 :approved 更新为 true。我想这是我忽略的东西

表单 index.html.erb

  <% @snippets.each do |snippet| %>
    <tr>
      <td><%= link_to snippet.content %></td>
      <td><%= snippet.created_at.to_date %></td>
      <td><%= render snippet %></td> 
      <td>Status</td>
<td><%= button_to 'Approve', active_snippet_path(snippet.id) %></td>
</tr>

控制器(片段#approve)

def approve
    #@snippet = @book.snippet.find(params[:id])
    if @snippet.update_attribute(:approved, true)
    redirect_to users_path
  else
   render root_path
  end 
end

该错误显然是由该位引起的,但不确定原因:

 def find_book
    raise params.inspect
    @book = Book.find(params[:id])
    @snippet = @book.snippets
    return @book
  end
end

这是我得到的检查。

{"authenticity_token"=>"D70njMSz3iYbVcCCkFIlolPBKeZUsVtFL5pabRT1CMo=", "controller"=>"snippets", "action"=>"approve", "id"=>"id"}

如果您需要其他任何东西,请告诉我。我想清楚地理解为什么这个 put 不适用于嵌套模型。

4

1 回答 1

0

问题是您似乎拥有一组设置为@snippet 的片段(@book.snippets),并且正在尝试使用仅适用于一个实例的 update_attribute 方法。如果要更新数组,可以使用以下效果:

Snippet.where(book_id: params[:id]).update_all(approved: true)
于 2013-10-23T16:42:51.887 回答