我是RubyonRails的新手,已经挣扎了一段时间。具体来说,我的问题是我有两张表:预约和服务1。服务1有_many:约会和Appointment belongs_to:Service1。
在我的网站上,用户可以注册预约。在这种形式下,他们可以选择这样的服务:
<%= f.label "Service" %>
<%= f.select :service1, options_from_collection_for_select(Service1.all, :id, :name), :prompt => true %>
在预约控制器中,我有:def创建@造型师=["Zoe Andreadis","Amanda Giorgi","Michelle Oda","Danny Quaranta","Demi Tsionis","Christina Vicencio","Nancianne Warren"]
@appointment = Appointment.new(params.require(:appointment).permit(:date, :start, :stylistpref))
@appointment.service1 = Service1.find_by_name(:service1).id
@appointment.user = current_user
if @appointment.save
flash[:success] = "Appointment Booked for " + @appointment.date + @appointment.time
redirect_to(root_url)
else
render 'new'
end
结束
f.select将名称存储为字符串,我确信约会模型需要id。有了这个代码,我在@appointment.service1行收到了这个错误消息:nil:NilClass 的未定义方法"id"
如果我去掉了那行,那么我会得到一条flash错误消息,service1为空。
请帮我解决这个问题!非常感谢。
您没有名称为"Service1"的Service1。find_by_name
带着nil
返回
根据您的评论进行更新:
你发布的第一个代码片段:在表单中,对吗?我想你想要params[:object_key][:service1]
,其中:object_key
是表单所基于的记录的名称。
不过,我相信有一种更简单的方法可以做你正在做的事情。不过我还得看更多的代码。