Rails - 未能在控制器中将参数从New传递给Create

时间:2014-09-10 09:07:29

标签: ruby-on-rails ruby-on-rails-4 model-view-controller

这是视图的摘录 -

  <%= @user.id %> is the user id
  <%= @book.id %> is the book id

  <div class="field">
     <%= f.select :contribtype, options_for_select(Contribution::CONTRIB_TYPES) %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我已经从之前的视图传递了用户和书籍的参数,例如我有

http://localhost:3000/contributions/new?book_id=1&user_id=5

作为表单的URL。正确的user_id和book_id显示在页面上。

我在控制器中有以下内容 -

  def new
    @user = User.find_by_id(params[:user_id])
    @book = Book.find_by_id(params[:book_id])
    @contribution = Contribution.new(params[book_id: @book.id, user_id: @user.id])
  end

  def create
    @contribution = Contribution.new(contribution_params)
....

...但是在创建对象时没有捕获user_id和book_id。我没有收到任何错误,数据根本没有在新对象中设置。我应该通过不同的方式在create动作中传递参数吗?

1 个答案:

答案 0 :(得分:1)

我会使用隐藏字段作为快速修复:

@contribution = Contribution.new

in html:

<%= f.hidden_field :user_id, value: @user.id %>
<%= f.hidden_field :book_id, value: @book.id %>

请务必在contribution_params

中允许这些字段