我有一个名为EventUsers的加入模型名为EventUsers,它有一个user_id,event_id和我创建的名为opinion的属性:string
create_table :events_users, :id => false do |t|
t.integer :user_id
t.integer :event_id
t.string :opinion # extra attribute I made
end
和 event.rb
has_and_belongs_to_many :users
和user.rb
has_and_belongs_to_many :events
我可以使用
添加到连接模型 @user = User.find(session[:user_id])
@event = Event.find(params[:id])
@user.events << @event
但在我这样做之前......如何将意见属性设置为某个字符串,然后插入?
答案 0 :(得分:3)
如果您的连接模型除了外键之外还有任何字段,那么您不应该使用HABTM关系。您应该创建一个中间模型,例如Opinion,并让每个模型都如此相关:
class Event < ActiveRecord::Base
has_many :opinions
has_many :users, :through => :opinions
end
class User < ActiveRecord::Base
has_many :opinions
has_many :events, :through => :opinions
end
class Opinion < ActiveRecord::Base
belongs_to :user
belongs_to :event
end
更新
为了添加意见,您可能希望创建RESTful接口。我首先要在用户,事件或两者中添加嵌套路由
map.resources :users do |user|
user.resources :opinions
end
然后使用标准RESTful操作(新建,创建,编辑,更新等)和相应视图添加意见控制器。关于如何构建标准的restful接口有很多资源,但我会从这些开始:
http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default