1

まず、私のモデルは次のとおりです。

class User < ActiveRecord::Base
        has_one :event
    has_one :user_details, :dependent => :destroy
        accepts_nested_attributes_for :user_details, :event
end

class UserDetails < ActiveRecord::Base
    belongs_to :user

    def full_name
        [self.first_name, self.last_name].compact.join(' ')
    end
end

class Event < ActiveRecord::Base
    belongs_to :user
end

そして、私は私のビューの1つにこの行を持っています

<%= collection_select(:event, :user_id, User.all, :id, :email) %>

問題なく動作し、すべてのユーザーのメールがドロップダウン リストに表示されます。しかし、表示したいのは、user_details モデルの一部であるドロップダウン リストのユーザー full_name です。

どうやってやるの?

# basically i need to change :email to something like :user_details.full_name, but i'm not sure how.
<%= collection_select(:event, :user_id, User.all, :id, :email)  %>

編集

私が試してみました:

# undefined method `full_name' for :user_details:Symbol
<%= collection_select(:event, :user_id, User.all, :id, :user_details.full_name)  %>

# This shows the dropdown with a bunch of UserDetails objects aka #<UserDetails:asfjoisdfa>
<%= collection_select(:event, :user_id, User.all, :id, :user_details)  %>

# undefined method `full_name' for #<User:0x007ff18bf0c470>
<%= collection_select(:event, :user_id, User.all, :id, :full_name)  %>
4

3 に答える 3

4

以下を使用します

<%= collection_select(:event, :user_id, User.all, :id, :full_name)  %>

full_nameただし、ユーザー モデルでメソッドを宣言する必要があります。

# user.rb
def full_name
  user_details.full_name
end

またはデリゲートを使用できます

delegate :full_name, to: :user_details
于 2013-03-01T03:59:44.897 に答える
-1

試す:

<%= link_to "#{user.user_details.full_name}", "mailto:#{email}" %>

あなたの見解では、あなたがどのようにうまくやっていくか教えてください...

編集 user.rb ファイルで user_details.full_name を返すヘルパー メソッドを定義し、それを使用します。

<%= collection_select(:event, :user_id, User.all, :id, :*method_returning_user_details.full_name* %>

于 2013-03-01T03:24:10.523 に答える
-2

試してみてください:
あなたの見解ではこれ

アップデート:

 <% @fullname = User_details.fullname %>

そしてあなたのcollection_selectで

  <%= collection_select(:event, :user_id, User.all, :id, @fullname) %>


進捗状況を教えてください。

于 2013-03-01T03:36:34.340 に答える