#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 или что-то в этом роде?