Ruby 使用联接和包含访问ActiveRecord对象,方法是通过选项\u从\u集合\u访问\u select()

Ruby 使用联接和包含访问ActiveRecord对象,方法是通过选项\u从\u集合\u访问\u select(),ruby,forms,ruby-on-rails-4,rails-activerecord,html-select,Ruby,Forms,Ruby On Rails 4,Rails Activerecord,Html Select,当我使用: <%= @employees.first.actor.name %> # someones name... 对于控制器中相同方法的同一页面上的选择标签;它说: undefined method `actor.name' for #<Employee:0x0000000b0f3218> 是的,\u select的\u collection\u中的options\u有点捷径,但它通过使用send调用对象上具有给定名称的方法来工作。而send无法处理像actor

当我使用:

<%= @employees.first.actor.name %>
# someones name...
对于控制器中相同方法的同一页面上的选择标签;它说:

undefined method `actor.name' for #<Employee:0x0000000b0f3218>

是的,\u select的\u collection\u中的
options\u有点捷径,但它通过使用
send
调用对象上具有给定名称的方法来工作。而
send
无法处理像
actor.name
这样的嵌套调用

我会用
actor\u name
actor.name
的方法来解决这个问题。将以下内容添加到您的模型中:

# app/models/employee.rb
delegate :name, to: :actor, prefix: true
然后将视图更改为:

options_from_collection_for_select(@employees, :id, :actor_name)
# app/models/employee.rb
delegate :name, to: :actor, prefix: true
options_from_collection_for_select(@employees, :id, :actor_name)