我有以下表格:
= semantic_form_for @contact, :url => club_contact_path(id: @club.id), :html => {:novalidate => false, :id => 'contact_club_form'} do |f|
.sm-12.xl-5
= f.input :club_id, :as => :hidden, :input_html => { :value => @club.id }
= f.input :firstname, :required => true
= f.input :lastname, :required => true
= f.input :email, :required => true
= f.input :telephone, :as => :phone, :required => false
= f.input :question, :required => true, :as => :text, :input_html => {:rows => 5, :cols => 40}
= f.action :submit, :button_html => {:class => 'btn btn-aqua', :value => 'Submit'}
下面我已将contact_params
方法添加到控制器。
这个错误并且告诉我我有一个Rails::ForbiddenAttributesError
,但我似乎无法找出原因。
def contact_params
params.require(:contact).permit(:firstname, :lastname, :email, :telephone, :question, :club_id)
end
我的模型如下:
class Contact < ActiveRecord::Base
belongs_to :club
validates_presence_of :firstname, :lastname, :email, :question, :telephone, :club_id
end
编辑:添加了操作
def contact_club
@contact = params[:contact]
if Contact.create(@contact)
byebug
ContactMailer.send_contact_mail_to_club(@contact)
render :nothing => true
end
end
答案 0 :(得分:1)
您应该在创建操作中传递允许的参数而不是直接参数。因此,请尝试在创建调用中将@contact
更改为contact_params
。
在您当前的代码中,您没有通过正确的参数。因此,请尝试更改下面的代码。
def contact_club
@contact = params[:contact]
if Contact.create(contact_params)
byebug
ContactMailer.send_contact_mail_to_club(@contact)
render :nothing => true
end
end
答案 1 :(得分:1)
contact_params方法将您的参数包装在Rails现在在创建或保存新对象时所期望的类中。现在你正在直接访问它,如果你使用的是强参数,你就不能再这样做了。您希望将contact_params传递给Contact.new或Contact.create方法。
此外,我对您的设置@contact = params [:contact]感到困惑,我认为您正在尝试获取Contact模型的实例,然后将其传递给邮件程序。那是对的吗?如果是这样,以下代码段应该更接近您正在寻找的内容。
def contact_club
@contact = Contact.new(contact_params)
if @contact.save
byebug
ContactMailer.send_contact_mail_to_club(@contact)
render :nothing => true
end
end