Как мне добавить простую форму, которая включает в себя два скрытых элемента в Rails 3.1?

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

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

По сути, я хочу создать новую «обратную связь», которую можно рассматривать как похожую на твит.

Поэтому, когда вы вводите текст, что можно сделать только при входе в систему (т. Е. current_user Установлено), Он должен автоматически сохранять poster_id и receiver_id .

Вот моя Feedback модель:

 class Feedback < ActiveRecord::Base
    belongs_to :poster, :class_name => 'User'
    belongs_to :receiver, :class_name => 'User'

end
# == Schema Information
#
# Table name: feedbacks
#
#  id          :integer         not null, primary key
#  poster_id   :integer
#  receiver_id :integer
#  content     :string(255)
#  created_at  :datetime
#  updated_at  :datetime
  

Это моя _form часть для создания новых объектов / записей обратной связи.

 <%= form_for(@feedback) do |f| %>
  <% if @feedback.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@feedback.errors.count, "error") %> prohibited this feedback from being saved:</h2>

      <ul>
      <% @feedback.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="poster_id">
    <%= f.hidden_field(:poster, current_user) %><br />
  </div>
  <div class="receiver_id">
    <%= f.hidden_field(:receiver, @user) %><br />
  </div>
  <div class="field">
    <%= f.text_field :content %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
  

Я пробовал это, но ошибка, которую я продолжаю получать, это:

 undefined method 'merge' for nil:NilClass
  

Я почти уверен, что делаю это неправильно, но, основываясь только на документах API и руководстве, я не совсем понимаю, как это сделать правильно и почему.

Итак, если бы вы могли рассказать мне не только о том, в чем заключается решение, но и о том, почему это так, я был бы очень признателен.

Спасибо.

Комментарии:

1. Привет — итак, вы говорите, что если вы удалите вызовы hidden_field из приведенного выше, вы не получите ошибку, т.Е. Ошибка возникает при рендеринге формы, а не позже, при ее отправке?

2. вы не должны устанавливать poster_id значение current_user в своем представлении, но сделайте это в create / update action в вашем контроллере. или сделайте оба. но без этого любой мог оставить отзыв как другой пользователь.

3. @ChrisKimpton да, это именно то, что я говорю. Как только я удаляю hidden_field теги, это не выдает эту ошибку. Естественно, форма не работает, потому Feedback что модель ищет poster_id , и receiver_id оба из них не могут быть найдены без явного включения.

Ответ №1:

   <%= f.hidden_field "poster_id", :value => current_user.id %>
  <%= f.hidden_field "receiver_id", :value => @user  %>
  

На самом деле, я не совсем уверен в @user . Может быть, вы хотите @user.id или что-то в этом роде?