当我使用时:
<%= @employees.first.actor.name %>
# someones name...
作品!但是当我这样做时:
options_from_collection_for_select(@employees, 'id', 'actor.name')
对于同一页面上的select标签,控制器中的方法相同;它会:
undefined method `actor.name' for #<Employee:0x0000000b0f3218>
不是&#39; options_from_collection_for_select()&#39;前者的简写?为什么我会收到此错误?
我用过:
@employees = Employee.includes(:actor).joins(:actor)
答案 0 :(得分:0)
是的,options_from_collection_for_select
是一种捷径,但它可以通过使用send
来调用对象上具有给定名称的方法。并且send
无法处理actor.name
等嵌套调用。
我会通过delegating方法actor_name
向actor.name
解决此问题。将以下内容添加到您的模型中:
# app/models/employee.rb
delegate :name, to: :actor, prefix: true
然后将您的观点更改为:
options_from_collection_for_select(@employees, :id, :actor_name)