时间:2011-01-10 23:32:23

标签: ruby-on-rails join attributes insert

我有一个名为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

但在我这样做之前......如何将意见属性设置为某个字符串,然后插入?

1 个答案:

答案 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

http://guides.rubyonrails.org/routing.html#nested-resources