【问题标题】:accessing user attributes with a has_many and belongs_to association使用 has_many 和 belongs_to 关联访问用户属性
【发布时间】:2012-12-18 18:35:56
【问题描述】:

不知道为什么我能解决这个问题,但希望能得到一些帮助。在使用 ransack 显示搜索结果时,我试图从我的用户模型中访问属性名称。

我的配方控制器是这样的

def index
  @q = Recipe.search(params[:q])
  @searchresults = @q.result(:distinct => true)
  @q.build_condition
end

def search
  index
end

所以当我在搜索页面中输出结果时,我可以从配方模型中选择属性,但无法从用户模型返回任何内容(我想这与我的索引中有 Recipe.search 的事实有关? )

查看

<% @searchresults.each do |r| %>
  <%= image_tag r.avatar.url(:thumb)%>
  <%= r.user.name%>
  <%= r.dish_name %>
  <%= r.difficulty %>
  <%= r.preperation_time %>
<% end %>

我得到了未定义的方法名称

配方模型

belongs_to :user

用户模型

has_many :recipes

我错过了什么,我猜的很简单?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 object associations


    【解决方案1】:

    通常您不希望将关联方法链接在一起,因为这会使处理nil 关联变得更加困难(我假设这就是这里发生的情况:r.usernilnil.name 是未定义的方法)。

    Rails 有一个内置的委托器,您可以使用它来回避这个问题:

    class Recipe < ActiveRecord::Base
      belongs_to :user
      delegate :name, :to => :user, :prefix => :user, :allow_nil => true
    end
    

    这将定义一个名为 r.user_name 的配方实例方法,如果用户存在则返回名称,如果不存在则返回 nil

    【讨论】:

    • 嗯,我有点困惑,因为在用户注册时使用了这个名字,他们必须填写......啊,除非我的一个老用户在没有用户名字段时上传了食谱报名。如果一个或两个食谱没有名称,这会导致问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多