#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" %>
...