Tag: has many through

Rails ActiveRecord:Three Table has_many through:associations

我正在尝试构建一个表来处理某个广告系列已使用以下模型关联设置的位置和类别: class Campaign < ActiveRecord::Base has_many :campaign_category_metro_bids, dependent: :destroy has_many :metros, through: :campaign_category_metro_bids has_many :categories, through: :campaign_category_metro_bids end class Metro < ActiveRecord::Base has_many :campaign_category_metro_bids has_many :campaigns, through: :campaign_category_metro_bids has_many :categories, through: :campaign_category_metro_bids end class Category < ActiveRecord::Base has_many :campaign_category_metro_bids has_many :campaigns, through: :campaign_category_metro_bids has_many :metros, through: :campaign_category_metro_bids end class CampaignCategoryMetroBid < ActiveRecord::Base belongs_to :campaign belongs_to […]

HMT collection_singular_ids =删除连接模型是直接的,不会触发销毁回调

刚遇到has_many问题:通过关联和after / before-destroy回调没有被触发。 说,我有用户,组和称为成员资格的中间关系。 我有一个表单,允许用户通过在核对相关复选框时创建新的成员资格记录来注册成组。 基本上是一组group_id。 看起来像这样: Which group would you like to join? (check all that apply) [] Group A [] Group B [] Group C 我希望记录一些行动,例如加入一个小组或将一个小组留在活动日志表中,并做一些其他不太重要的问题。 我有以下定义: class Group :memberships end class Membership < AR::Base belongs_to :user belongs_to :group after_create :log_event_to_audit_table after_destroy :log_event_to_audit_table end class User :memberships attr_accessible :group_ids # enables mass-assignment end […]

用户has_many:用户,:通过=>:朋友 – 怎么样?

这是我的代码: class Friend “User”, :foreign_key => “friend_id” end class User :friends #… end 当我现在开始添加用户… user.users << user2 user.save 只填充了friend的user_id,friend_id为null。 有帮助吗? 你的,乔恩。

Rails has_many:通过条件和建立关联

我在构建一个has_many :through的关联时遇到了问题has_many :through条件。 我有这个型号: class Contact :group_contacts, :conditions => {:groups => {:published => true}} end 当我尝试从联系人实例化一个组时,会出现问题。 使用上面的语法,我收到一个错误: contact.groups.build => ActiveRecord::UnknownAttributeError: unknown attribute: groups 但是,当我使用以下语法时,它可以工作: has_many :groups, :through => :group_contacts, :conditions => [‘groups.published = ?’, true] contact.groups.build => # 我在这个问题中看到了对确切问题的引用。 据说将为此错误提交一张票(返回前3版本)。 我在rails 3.0.x上找不到任何东西。 我正在使用3.0.8。 有没有人发现这个问题? 进一步说明 : 我还发现,当我建立群组时,它实际上忽略了我在建立时的关联条件。 上面构建published => true的唯一原因是因为它是db中的默认值。 这似乎是一种回归,任何人都可以validation这一点吗?

在Rails has_many中保存关联记录的顺序:通过关联

我正在开发一个Rails插件,其中包含一种修改has_many:关联中相关记录顺序的方法。 假设我们有以下型号: class Playlist :destroy has_many :songs, :through => :playlists_songs end class Song :destroy has_many :playlists, :through => :playlists_songs end class PlaylistsSong < ActiveRecord::Base belongs_to :playlist belongs_to :song end 如果我们改变播放列表歌曲的顺序(例如@playlist.songs.rotate! ),Rails不会触及playlists_songs表中的记录(我正在使用Rails 3.1),这是有道理的。 我想调用播放列表的歌曲=方法保存歌曲的顺序,但是,可以通过删除播放列表中的相关现有行并以正确的顺序创建新的行(以便:order => “id”可以在检索它们时使用)或者通过向playlists_songs添加sort:integer列并相应地更新这些值。 我没有看到任何允许这样做的回调(例如before_add)。 在ActiveRecord :: Associations :: CollectionAssociation中 ,相关的方法似乎是writer , replace和replace_records ,但我对最好的下一步将会失败。 有没有办法扩展或安全地覆盖这些方法之一,以允许我正在寻找的function(最好只针对特定的关联),或者是否有一个不同的,更好的方法呢?

Rails 3.1:通过关系在has_many的连接表上自定义validation消息?

我有一个Meal模型has_many :foods, :through => :servings 。 Meal还: accepts_nested_attributes_for :servings, :allow_destroy => true validates_associated :servings Serving模型有一个名为serving_amount的字段和一个名为amount_recorded的字段。 在Serving模型中,我目前使用此validation: validates :serving_size, :numericality => {:greater_than => 0}, :if => :amount_recorded? validation失败时返回的消息很糟糕。 事实上,每餐可能有多份食物。 如何创建引用服务大小无效的食物名称的自定义validation消息? 例如,我想说,“你为西瓜输入了一个无效的服务大小”,如果amount_recorded为一个name西瓜的Food的服务是真的,validation失败。

Rails 4:保存子记录ID但不保存其属性,使用带有has_many关系的嵌套表单

我有3个模型与has_many通关系:食物(例如:巧克力),Sub(巧克力食物替代品),关节(联合表)。 说@food = Food.find(1); has_many通过关系允许我做@subs = @ food.subs,它返回与@food相关的所有替代品。 这工作正常,但只保存Sub id而不是它的属性:name和:description,因为你可以看到它在我的控制器中的create action中尝试保存@ food.subs时返回nil: => #<ActiveRecord::Associations::CollectionProxy [#]> 我想问题在于我的食物控制器中的创建动作,也许与我的嵌套forms有关。 我花了无数个小时试图解决这个问题,我非常渴望找到答案。 我真的不知道在哪里看。 我是rails的新手,所以非常感谢你的帮助和时间,我真的很感激。 请尽可能根据我的初学者水平调整你的答案:-)。 下面是我的控制器样品,表格和相关信息。 这是我的模特: class Food :joints accepts_nested_attributes_for :subs end class Sub :joints accepts_nested_attributes_for :foods end class Joint < ActiveRecord::Base belongs_to :food belongs_to :sub end 这是我的db-schema FYI: create_table “foods”, force: true do |t| t.string “name” t.text “description” […]

has_many通过与现有对象/ ActiveRecord的关联

给定模型 class Composition :compositions_tags end class Tag :compositions_tags validates_uniqueness_of :tag, only: [:create, :update], message: “already taken” end class CompositionsTag < ActiveRecord::Base belongs_to :composition belongs_to :tag end 现在,例如我 Composition.create(content: “Hello”).tags.create(text: “#hi”) 结果将是具有内容“Hello”的组合和已创建文本“#hi”的标签。 然后我再创一个作文。 Composition.create(content: “Goodmorning”) 现在我不知道和想要做的是将其与文本“#hi”的现有标签相关联。 我该如何以最优雅的方式做到这一点?

NameError:has_many通过关系的未初始化常量

我似乎无法做到这一点。 我有许多通过关系只是不工作。 这是设置: class Group :destroy has_many :phone_numbers, through: :groups_phone_numbers attr_accessible :name end class PhoneNumber < ActiveRecord::Base belongs_to :user has_many :responses has_many :groups_phone_numbers has_many :groups, through: :groups_phone_numbers attr_accessible :label, :number end class GroupPhoneNumber < ActiveRecord::Base belongs_to :group belongs_to :phone_number end 我已经尝试了复数化的每个变体,只是无法超越未初始化的错误。 我究竟做错了什么? 数据库中的表(连接模型)称为groups_phone_numbers。 确切的错误(g是一组): 1.9.3p0 :002 > p g.phone_numbers NameError: uninitialized constant Group::GroupsPhoneNumber 进行连接表的迁移: class […]

友谊has_many通过模型与多个状态’

目前我的用户模型具有以下代码: has_many :notifications has_many :friendships has_many :friends, :through => :friendships, :conditions => { status: ‘accepted’ } has_many :requested_friends, :through => :friendships, :source => :friend, :conditions => { status: ‘requested’ } has_many :pending_friends, :through => :friendships, :source => :friend, :conditions => { status: ‘pending’ } 我的友谊模型如下: belongs_to :user belongs_to :friend, :class_name => “User” def self.request(user, friend) […]