RoR form_for: скрытое поле не включено в параметр объекта и поэтому не работает. - PullRequest
4 голосов
/ 09 июля 2010

Я использую форму для добавления записи, и мне нужно отправить идентификатор текущего пользователя вместе с параметрами записи. Вот мой код формы:

<% 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 %>

Проблема в том, что user_id сохраняется как ноль. Я заметил в выводе консоли ниже, что 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]

Ответы [ 4 ]

19 голосов
/ 18 марта 2013

Другие ответы написаны для Rails 2. Адаптация ответа Салила на Rails 3 использует этот формат:

<%= f.hidden_field :user_id, :value => current_user.id %>
16 голосов
/ 09 июля 2010

ИСПОЛЬЗОВАНИЕ

<%= f.hidden_field :user_id, current_user.id  %>

INSTEAD OF

<%= hidden_field_tag 'user_id', current_user.id  %>

Объяснение: - В контроллере, вероятно, вы делаете что-то вроде следующего:

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

Итак, вы должны один изследующее (не упомянутое выше)

@entry = Entry.new(params[:entry])
@entry.user_id= params[:user_id]
@entry.save

или

<%= hidden_field_tag 'entry[user_id]', current_user.id  %>
7 голосов
/ 18 октября 2013

Для Rails 4 используйте:

<%= f.hidden_field :user_id, value: current_user.id %>
1 голос
/ 09 июля 2010

включает скрытое поле с вашим объектом конструктора форм 'f'

f.hidden_field: user_id, current_user.id

...