Рельсы 6 передают переменную в частичную

#ruby-on-rails

Вопрос:

Я хочу сделать частичную запись для каждого разговора. У меня есть следующий код:

 # app/views/messages/_new.html.erb
<%= simple_form_for [@conversation, @message] do |f| %>
  <%= f.text_area :body %>
  <%= f.text_field :messageable_id, value: current_user.id, type: "hidden" %>
  <%= f.text_field :messageable_type, value: "#{current_admin_user.class.name}", type: "hidden" %>
  <%= f.submit "Send Reply" %>
<% end %>
 

Я хочу, чтобы изменение value обоих скрытых текстовых полей зависело от переданной переменной. Что-то вроде:

 # app/views/admin/conversations/_show.html.erb
<%= render 'messages/new', value: current_admin_user.id %>
 

С приведенным ниже кодом я получаю ошибку Validation failed: Messageable must exist , которая означает messageable_id = nil

Ответ №1:

Потому что вы не используете значение, которое передаете частичному.

Кроме того, вам нужно передать обе переменные

Попробуйте заменить частичное на следующее

 # app/views/admin/conversations/_show.html.erb
<%= render 'messages/new', messageable_id: current_admin_user.id, messageable_type: "#{current_admin_user.class.name}" %>
 

и использовать их

 # app/views/messages/_new.html.erb
<%= simple_form_for [@conversation, @message] do |f| %>
  <%= f.text_area :body %>
  <%= f.text_field :messageable_id, value: messageable_id, type: "hidden" %>
  <%= f.text_field :messageable_type, value: messageable_type, type: "hidden" %>
  <%= f.submit "Send Reply" %>
<% end %>
 

ПРИМЕЧАНИЕ: Если вы хотите _new , чтобы частичная визуализация также выполнялась самостоятельно

замените его чем-нибудь вроде этого:

 <% messageable_id ||= current_admin_user.id %>
<% messageable_type ||= "#{current_admin_user.class.name}" %>
<%= f.text_field :messageable_id, value: messageable_id, type: "hidden" %>
...