我有两个模型,用户和促销,想法是一个促销可以有很多用户,一个用户可以有很多促销。
class User < ActiveRecord::Base
has_and_belongs_to_many :promotions
end
class Promotion < ActiveRecord::Base
has_and_belongs_to_many :users
end
我还有一个promotions_users表/模型,它没有自己的id,它引用user_id和promotions_id
class PromotionsUsers < ActiveRecord::Base
end
那么,如何将用户添加到促销中呢?我尝试过以下方法:
user = User.find(params[:id])
promotion = Promotion.find(params[:promo_id])
promo = user.promotions.new(promo)
这将导致以下错误:
NoMethodError: undefined method `stringify_keys!' for #<Promotion:0x10514d420>
如果我试试这句话: 促销活动= www.example.com(www.example.com)user.promotions.new(promo.id)
我得到这个错误:
TypeError: can't dup Fixnum
我相信有一个非常简单的解决方案,我的问题,我只是没有寻找解决方案的正确方式。
5条答案
按热度按时间v1uwarro1#
user.promotions
是与用户关联的促销数组。请参阅apidock,了解所有可用的不同功能。
hgncfbus2#
你可以只做
或
您可以在这里阅读有关
has_and_belongs_to_many
关系的信息。nue99wik3#
这也很有用
因此,当您保存用户对象时,升级对象也会保存。
这是
创建促销,您无需保存它或用户模型
ds97pgxw4#
如果您想使用原型PromotionsController CRUD设置将用户添加到促销中,并且您 * 不 * 使用Rails表单助手,则可以将参数格式化为:
这允许您保持控制器的精简,例如,您不必向
update
方法添加任何特殊内容。结果将是:
sz81bmfz5#
对于当前的所有这些,Rails确实有内置的函数,就像更简单的关联。
对于构建(即Promotion.new),您可以使用
创造它是一样的
我只想给予一个更熟悉的选项,在apidoc中有概述,其他答案也一样。