无法使用关联表格从表单中创建记录

时间:2013-12-06 03:35:45

标签: ruby-on-rails ruby forms select model-associations

我是Ruby on Rails的新手,现在已经挣扎了一段时间。特别是我的问题是我有两个表:约会和service1s。 Service1 has_many:约会和约会belongs_to:service1。

在我的网站上,用户可以注册预约。在那种形式下,他们可以选择这样的服务:

<%= f.label "Service" %>
  <%= f.select :service1, options_from_collection_for_select(Service1.all, :id, :name), :prompt => true %>

在约会控制器中,我有:     def创建 @stylists = [“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的未定义方法`id':NilClass

如果我摆脱了那一行,那么我得到一条flash错误信息,即service1被留空了。

请帮我解决这个问题! 谢谢!

1 个答案:

答案 0 :(得分:0)

您没有名为“service1”的Service1。 find_by_name将以nil

回复params[:object_key][:service1]

更新以回复您的评论

您发布的第一个代码段:这是在表单中,对吗?我想你想要:object_key,其中{{1}}是表单所基于的记录的名称。

我很确定有一种更简单的方法可以做你正在做的事情。我不得不看到更多的代码。