Tag: 有一个

has_many条件或proc对外键

我在两个模型之间有一个has_many关联,使用日期作为每个模型的外键和主键。 它完全可以单向工作,但不是另一种方式。 作品 has_one :quiz_log, :primary_key => :start_at, :foreign_key => :start_at 不起作用 has_many :event_logs, :primary_key => :start_at, :foreign_key => :start_at 原因是(我认为)因为QuizLog上的start_at是一个date而EventLog上的start_at是一个date 。 所以它返回nil试图匹配一个简单日期的确切日期时间。 如何在第二个语句上转换foreign_key start_at以将其从datetime首先转换为简单日期,以便它与第二个模型匹配?

无法使用has_one关联获得嵌套表单

我有这些模型: class User < ActiveRecord::Base has_one :city accepts_nested_attributes_for :city end class City < ActiveRecord::Base belongs_to :user end 这个控制器动作: def create @user = User.new(params[:user]) respond_to do |format| if @user.save format.html { redirect_to(@user, :notice => ‘User was successfully created.’) } format.xml { render :xml => @user, :status => :created, :location => @user } else format.html { render […]

Rails 3和update_attribute上的奇怪关系行为

我很难找到测试失败的原因: describe User, “Instance Methods” do describe “leave_group!” do it “should set group_id to nil” do @user = Factory(:user) @group_2 = Factory(:group, :owner => @user) @user.leave_group! @user.reload.group_id.should be_nil # THIS LINE IS FAILING!!! end it “should assign another owner to group, if owner was user” do @user = Factory(:user) @group = Factory(:group, :owner => @user) […]

如何覆盖Rails has_one关联的getter方法?

我想覆盖/扩展Rails has_one关联方法,以便它始终返回关联类的实例。 (如果数据库中不存在,我想创建一个新的并将其分配给父实例。) 理想情况下,我想通过内置的Rails关联扩展机制来实现这一点。 但是,我不知道“getter”方法的名称,因此我不知道要覆盖什么。 如何覆盖关联getter,以便我可以在nil时实例化一个新对象?

当模型具有另一个模型的一个或零个实例时,可以使用has_one关联吗?

RailsGuides说: http://guides.rubyonrails.org/association_basics.html一个has_many“关联表示模型的每个实例都有零个或多个另一个模型的实例。” “has_one关联还与另一个模型建立一对一的连接,但语义(和后果)有些不同。这种关联表明模型的每个实例都包含或拥有另一个模型的一个实例。” 这是否意味着如果我想建立一个关联,模型的每个实例都有零或另一个模型的一个实例,最好的方法是使用has_many而不是has_one? 如果我使用has_one会遇到什么问题? 谢谢。

has_and_belongs_to_many或has_many用户/组关系?

我正在研究具有以下型号的Rails 3.1应用程序: 用户: class User ‘Group’ end 组: class Group ‘User’ end 它们之间有一个连接表,groups表也有一个“user_id”列。 我希望能够在我的groups_controller.rb中写这个 @group = Group.find(params[:id]) foo = @group.owner 但是当我这样做时,我会遇到以下错误: Mysql2::Error: Unknown column ‘users.group_id’ in ‘where clause’: SELECT `users`.* FROM `users` WHERE `users`.`group_id` = 1 LIMIT 1 我不明白为什么它甚至在寻找那个专栏。 任何帮助,将不胜感激!

Rails:如果找不到任何错误,则创建关联

我有一个应用程序,我的用户可以拥有一组首选项。 两者都存储为ActiveRecord模型,如下所示: class User < AR::Base has_one :preference_set end class PreferenceSet < AR::Base belongs_to :user end 我现在可以访问用户的首选项: @u = User.first @u.preference_set => # @u.preference_set.play_sounds => true 但是如果尚未创建首选项集,则会失败,因为@ u.preference_set将返回nil,并且我将在nil上调用play_sounds 。 我想归档的是User.preference_set总是返回一个PreferenceSet实例。 我试过像这样定义它: class User < .. has_one :preference_set def preference_set preference_set || build_preference_set end end 这导致’Stack level too deep’ ,因为它以递归方式调用自身。 我的问题是: 如何确保@user.preference_set返回相应的preference_set-record,如果不存在,则构建一个新的? 我知道我可以重命名我的关联(例如, preference_set_real )并以这种方式避免递归调用,但为了简化我的应用程序,我想保留命名。 谢谢!

访问has_one关联的属性

我仍然是Rails的新手,所以希望这不是一个愚蠢的问题。 我有两个模型:用户和家务。 用户has_one杂事,Chore属于User class User < ActiveRecord::Base attr_accessible :chore_done, :email, :name, :phone has_one :chore class Chore < ActiveRecord::Base attr_accessible :name, :user_id belongs_to :user 在我的用户索引中,我正在尝试向所有用户显示并显示与他或她相关的杂项。 我这样做是通过将User.all传递给视图并使用.each来遍历每个用户: 不幸的是,我无法访问Chore的name属性。 我收到此错误: nil的未定义方法`name’:NilClass 如果我删除.name属性,它只返回一个指向Chore对象的指针。 我有一种感觉,这与将User.all对象传递给视图然后迭代它有关。 只需在控制台中访问特定的User对象(例如User.find(1)),然后访问user.chore.name就可以了。 1.9.3-p194 :045 > user = User.find(4) User Load (0.2ms) SELECT “users”.* FROM “users” WHERE “users”.”id” = ? LIMIT 1 [[“id”, 4]] => # 1.9.3-p194 […]