Как исправить параметры, требуемые для form_for contact в представлении с несколькими контроллерами

#ruby-on-rails #ruby #ruby-on-rails-4

#ruby-on-rails #ruby #ruby-on-rails-4

Вопрос:

У меня проблема в моей контактной form_for, у меня есть одна контактная форма, и я хочу отобразить свою контактную форму в представлении моего продукта. Если я сделаю это, у меня возникнут проблемы с моими требуемыми параметрами

Мои параметры contact_params работают в моем ContactController:

 def contact_params
   params.require(:contact).permit(:name, :email, :body)
end
  

У меня есть add в моем ApplicationController

 def set_contact
   @contact = Contact.new params[:contact] || {}
end
  

и это в моем ProductsControler

 show
   @contact = :set_contact
end
  

мой маршрут:

 get 'contact', to: 'contacts#new', as: 'new_contact'
post 'contact', to: 'contacts#create', as: 'create_contact'
  

мой рендеринг такой же, как:

 <%= render :partial => "contacts/contact" %>
  

и мой взгляд в _contact.html.erb:

  <%= form_for @contact, url: create_contact_url do |f| %>
  <%= f.text_field :name  %>
  <%= f.email_field :email %>
  <%= f.text_area :body  %>
 <%= f.submit 'Send' %>
  

Рельсы говорят мне:

 ActionController::ParameterMissing (param is missing or the value is empty: contact):
  

Если я удалю require(:contact), которые не работают, рельсы говорят мне:

 Unpermitted parameter: :contact
  

Спасибо

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

1. Где def contact_params ? params обычно используется в контроллере , а не в представлении . Для чего-то вроде контактной формы, также, вероятно POST , действие, а не GET как, вероятно, используется для просмотра страницы.

2. Я отредактировал свой ответ! Я допустил ошибку в своем описании! Спасибо

Ответ №1:

У вас опечатка в методе #показать ProductsControler @contact = :set_contact , вы должны вызвать метод set_contact без :

Правильный код: @contact = set_contact

Ответ №2:

Попробуйте объединить параметры с параметрами продукта params[:product].merge!(:контакт)

например, определить параметры company_params[:company].merge!(users_attributes: {‘0’: user_params.to_h }) params.require(:company).permit( :name, :contact_person_name, :email, :contact_person_number, :terms_and_conditions ) end

Услышать users_attributes из моей другой формы. Работает для меня.

Удачи.