我一直在为我的约会模型获取未经许可的参数。
以下是我的模特
class Appointment < ApplicationRecord
belongs_to :client
belongs_to :trainer
end
class Trainer < ApplicationRecord
has_many :appointments
has_many :clients, through: :appointments
end
class Client < ApplicationRecord
has_many :appointments
has_many :trainers, through: :appointments
end
这是我的控制器,为了简洁,我刚刚列出了我的私人方法。
def appt_params
params.require(:appointment).permit(:appointment_date, client_id: [],
trainer_id: [])
end
该错误表示培训师,客户的未经许可的参数。 我在强参数方法中遗漏了什么吗?
这是我的约会/新视图
<%= form_for @appointment do |f| %>
<%= f.datetime_select :appointment_date %>
<%= f.collection_select :trainer, Trainer.all, :id, :first_name %>
<%= f.collection_select :client, Client.all, :id, :name %>
<%= f.submit %>
<% end %>
我在appt_params方法中添加了集合,但仍然遇到了同样的错误。我仍然掌握着Rails,任何帮助都会受到赞赏,谢谢!
答案 0 :(得分:1)
由于您已经使用了关联,因此只有client_id和trainer_id就足够了,那些整数形式应该不是数组。
因此,请将您的强参数方法代码更改为:
def appt_params
params.require(:appointment).permit(:appointment_date, :client_id,
:trainer_id)
end
您的应用程序/新视图:
<%= form_for @appointment do |f| %>
<%= f.datetime_select :appointment_date %>
<%= f.collection_select :trainer_id, Trainer.all, :id, :first_name %>
<%= f.collection_select :client_id, Client.all, :id, :name %>
<%= f.submit %>
<% end %>
答案 1 :(得分:0)
运行时遇到的问题与您相同,经过数小时的调试,我得以解决:
这是我第一次尝试在Rails中使用与您相似的模型进行关联,因此大多数在线文档建议将id定义为client_ids:[]
,假设您的id是数组,而当它们绝对是整数作为我的参数时,>
Parameters: {"utf8"=>"✓", "authenticity_token"=>"LEcwQ56xYJGpq2zIs6Cz0YbU7B7mBKRa6rhspVIxo9vEB5/UoFUvHYiN0UC0krTiIp+d0tzhit6DZT1Z8PmYYg==", "califica"=>{"text"=>"hi", "grade"=>"5", "user_id"=>"1", "party_id"=>"1"}, "commit"=>"Create Calification"}
我认为这是由于f.collection_select
取了一个预期值。因此,在使用了:user_id => []
,user_id:[]
之类的数组的许可之后,我总是得到Unpermitted参数的错误。
尝试了@Bharath的答案(是正确的),但仍然无法正常工作,那是我意识到我的旧模型不是使用引用(ActiveModel::UnknownAttributeError (unknown attribute 'user_id' for Calification.):
)制作的,所以我不得不制作一个{ {3}}添加外键,然后一切正常。