【问题标题】:Working with associated models使用关联模型
【发布时间】:2011-12-23 04:05:15
【问题描述】:

在我的应用程序中,我有一个非常简单的关联。用户 has_many 电子邮件,此关联按预期与创建/更新/删除一起工作。

当我尝试显示信息时,事情变得有些困难。

在我的控制器中,我有以下代码:

def prospective_user
    @users = Account::User.all_by_user_status(0)     
    @users.each do |u|
        u.email = u.email.get_primary_email
    end
end

这应该做的是创建一个带有单个记录的 Account::Email 模型的实例。

get_primary_email 方法如下所示:

def self.get_primary_email
    first :conditions => ["is_primary = 1"]
end

在我看来,我看到的问题是,我在下面遇到了异常。这有点令人困惑,因为我没有遍历电子邮件对象。

undefined method each' for #<Account::Email:0x7fcc3a5c49d8>

我用来测试的代码是这样的:

<% @users.each do |u|%>
    <p>
        <%=debug(u.email)%>
    </p>
<% end %>

【问题讨论】:

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


    【解决方案1】:

    改为这样做:

     class User < ActiveRecord::Base
       has_many :emails
       has_one  :primary_email, :class_name => 'Email',
                                :conditions => { is_primary: 1 }
     end
    

    那你可以直接拨打user.primary_email

    # your controller
    def prospective_user
      @users = Account::User.includes(:primary_email).where(:status => 0)
    end
    
    # your view
    <% for user in @users %>
      <%= user.primary_email %>
    <% end %>
    

    【讨论】:

    • 进行此更改为#<:relation:0x7fdd6954c7e0> 创建了未定义方法“get_primary_email”的新异常
    • 我也更新了你的控制器代码。现在干净多了;)
    猜你喜欢
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多