【问题标题】:Rails Relation "Has_none_or_one"Rails 关系“Has_none_or_one”
【发布时间】:2013-01-16 17:26:34
【问题描述】:

我有一个问题,我有一个“用户”模型和一个“专业”模型。 在 Professional 模型中,指定它属于一个用户。

但是,用户模型中没有书面关系。应该是这样并没有错,一个用户可以有一个专业的(感谢belongs_to),但并非总是如此。

问题是:我不能执行“User.find(49).professional”来测试用户 n°49 是否是专业人士(它应该返回一个布尔值)。

但是我可以执行“Professional.find(65).user”,如果专业 n°65 是用户,则返回 true,否则返回 false。

在某些用户视图中,我有这个不起作用的原因:

- if @user.professional?
  div class="page-header"
    h1 Professional info
  ul style="list-style: none"
  // Id
  li
    strong
      = model_class.human_attribute_name(:id)
      ' :
    = @user.professional.id
  // Country
  li
    strong
      = model_class.human_attribute_name(:country)
      ' :
    = @user.professional.country

[...]

我有一个很宽的“li”列表。 因此,if 条件不起作用,@user.professional.someprofessionalattributes 也不起作用。

我最初的想法是应该在User模型中写“has_none_or_one”,但是我看官方文档时是不存在的。

感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails model associations slim-lang


    【解决方案1】:

    has_one 一个有或无的关系。如果用户没有对应的 Professional,则其 Professional 为 nil

    【讨论】:

    • 谢谢,我不知道,它的作用就像一个魅力很快!即使在阅读了文档之后,我也认为它没有得到解释>_
    • @sidney:很高兴为您提供帮助。当 StackOverflow 上的答案回答了您的问题时,请务必点击旁边的复选标记将其标记为“已接受”。这有助于保持网站井井有条,并确保提问者和回答者都因成为好公民而受到赞誉:) 谢谢!
    【解决方案2】:

    用于“has_one”,例如:

    建立这种关系

    在模型中用户:

    class User < ActiveRecord::Base
     has_one :professional, :dependent => :destroy
    end
    

    在模型Professional

    class User < ActiveRecord::Base
     #add this parameter in yours attributes
     attr_accessible :user_id
    
     belongs_to :user
    end
    

    将索引用户添加到专业模型(创建迁移)。

    rails g migration addIdUserToProfesional
    

    在创建的迁移中添加这个

    class addIdUserToProfesional < ActiveRecord::Migration
      def change
        add_column :professionals, :user_id, :integer
        add_index :professionals, :user_id
      end
    end
    

    pdt:抱歉,我的英语还不是很好,问候。

    【讨论】:

    • 谢谢你,但没有必要做所有这些,你的第一个报价和另一个答案就足够了;)
    • 看到帖子还没人回复的时候>.
    猜你喜欢
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多