Rails - создание записи в модели соединения, но с атрибутом - PullRequest
1 голос
/ 11 января 2011

У меня есть только что перенесенная модель соединения с именем EventUsers, у которой есть user_id, event_id и созданный мною атрибут под названием мнение: строка

  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 Ответ

3 голосов
/ 11 января 2011

Если в вашей модели соединения есть какие-либо поля, кроме внешних ключей, то вам не следует использовать отношения 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

...