RoR form_for:隐藏字段未包含在对象参数中,因此不起作用.

ben*_*ben 4 parameters ruby-on-rails form-for

我正在使用表单添加条目,我需要发送当前用户的id以及条目参数.这是我的表单代码:

<% form_for(@entry) do |f| %>
  <%= f.error_messages %>
<%= hidden_field_tag 'user_id', current_user.id  %>
  <p>
    <%= f.label :date %><br />
    <%= f.date_select :date %>
  </p>
  <p>
    <%= f.label :note %><br />
    <%= f.text_field :note %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>
Run Code Online (Sandbox Code Playgroud)

问题是user_id被保存为null.我注意到在控制台输出低于user_id是存在的,但它不是实际位于的条目对象参数.我怎样才能解决这个问题?谢谢阅读.

Processing EntriesController#create (for 127.0.0.1 at 2010-07-09 19:57:55) [POST]
  Parameters: {"commit"=>"Create", "action"=>"create", "user_id"=>"3", "entry"=>{"date(1i)"=>"2010", "date(2i)"=>"7", "date(3i)"=>"9", "note"=>"bb"}, "controller"=>"entries"}
  Entry Create (0.4ms)   INSERT INTO "entries" ("entry_id", "created_at", "updated_at", "date", "user_id", "note") VALUES(NULL, '2010-07-09 09:57:55', '2010-07-09 09:57:55', '2010-07-09', NULL, 'bb')
Redirected to http://localhost:3000/entries/7
Completed in 24ms (DB: 0) | 302 Found [http://localhost/entries]
Run Code Online (Sandbox Code Playgroud)

Eri*_* Hu 20

其他答案是为Rails 2编写的.Salil 3的Rails 3改编使用了以下格式:

<%= f.hidden_field :user_id, :value => current_user.id %>
Run Code Online (Sandbox Code Playgroud)


Sal*_*lil 16

使用

<%= f.hidden_field :user_id, current_user.id  %>
Run Code Online (Sandbox Code Playgroud)

代替

<%= hidden_field_tag 'user_id', current_user.id  %>
Run Code Online (Sandbox Code Playgroud)

解释: - 在控制器中你可能会做类似下面的事情

@entry = Entry.new(params[:entry])
@entry.save  #But there is no params[:entry][:user_id] so null is getting saved
Run Code Online (Sandbox Code Playgroud)

所以你必须满足以下条件之一(除此之外我提到过)

@entry = Entry.new(params[:entry])
@entry.user_id= params[:user_id]
@entry.save
Run Code Online (Sandbox Code Playgroud)

要么

<%= hidden_field_tag 'entry[user_id]', current_user.id  %>
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是旧的,但我只是想更新你的答案,因为它似乎不适用于Rails 3.0.7.我收到了与合并有关的错误,所以我不得不谷歌一些地方找到这个:`<%= f.hidden_​​field:user_id,:value => current_user.id%>` (14认同)

xhe*_*x14 7

对于Rails 4使用:

<%= f.hidden_field :user_id, value: current_user.id %>
Run Code Online (Sandbox Code Playgroud)