Rails - имеет много: через, с несколькими моделями путаницы - PullRequest
0 голосов
/ 12 января 2011

У меня есть 4 модели, с которыми я имею дело. У меня есть учетная запись, местоположение, тег и модель тегов. Я настроил это следующим образом

class Tag < ActiveRecord::Base

  # belongs_to :shelter
  has_many :taggings, :dependent => :destroy
  has_many :locations, :through => :taggings
  has_many :accounts, :through => :taggings

end

class Tagging < ActiveRecord::Base

  belongs_to :location
  belongs_to :tag
  belongs_to :shelter

end

class Account < ActiveRecord::Base
  has_many :taggings, :dependent => :destroy
  has_many :tags, :through => :taggings, :dependent => :destroy
end

class Location < ActiveRecord::Base
  has_many :taggings, :dependent => :destroy
  has_many :tags, :through => :taggings, :dependent => :destroy
end

create_table :taggings, :force => true do |t|
  t.references :account
  t.references :location
  t.references :tag
  t.timestamps
end

Проблема в том, что я создаю форму на странице местоположения. Я хочу иметь возможность пометить местоположение, но оно связано с учетной записью, и я борюсь с логикой правильного выполнения формы и логики контроллера

В форме, которую я имею, / location / 1 / помечает вложенную форму. Но в контроллере я не могу понять, как правильно добавить тег. Вот мой тэг-контроллер

def create
    @tag = Tag.find_or_create_by_name(params[:tag][:name])
    @location = @current_account.locations.find(params[:location_id])
    @location.tags << @tag
end

Работает вроде, но создает несколько строк. Я хочу создать тег, а затем назначить местоположение, учетную запись, тег для тегов.

1 Ответ

1 голос
/ 12 января 2011

Как насчет

@tag = Tag.find_or_create_by_name(params[:tag][:name])
@location = @current_account.locations.find(params[:location_id])
@tagging = Tagging.create(:tag => @tag, :location => @location, :shelter => @current_account)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...