2013-11-16 3 views
0

У меня есть несколько вопросов о том, как добавить метки для пользователей учетной записи:Rails 4 создать новый тег

Вот модель пользователя по отношению к меткам

has_many :tags, through: :taggings 

Вот Tag Модель:

class Tag < ActiveRecord::Base 
    attr_accessor :unread_count, :user_feeds 

    has_many :taggings 
    has_many :feeds, through: :taggings 
end 

И Tagging Модель:

class Tagging < ActiveRecord::Base 
    belongs_to :tag 
    belongs_to :feed 
    belongs_to :user 
end 

Я нахожусь в точке сценария, где у меня есть текущий пользовательский объект @user, и мне нужно просто создать тег с именем «Почтовый ящик», если он не существует. Я пробовал несколько методов создания и получил ожидаемые ошибки объекта.

Если кто-нибудь может помочь объяснить, как работать с этими моделями, я был бы признателен.

+0

@ user.tags << Tag.new (: имя => «Почтовый ящик»), вы, вероятно, хотите проверить, что тег еще не существует. – house9

+0

Так что не сохранять метод или что-то еще? – tmartin314

+0

Попробуйте и посмотрите, как sql сгенерирован в файле журнала – house9

ответ

3

законный способ сделать это

@user.tags.create(name: "Mailbox") 

Если вы хотите проверить, если он существует первого, рельсы 4 способа заключается в следующем:

@user.tags.find_or_create_by(name: "Mailbox") 

комментария, если у вас есть еще вопросы ,

+0

Спасибо, отлично работает. – tmartin314

0

Вы можете просто использовать << метод который has_many ассоциация автоматически добавляет:

@user.tags << Tag.find_or_create_by(name:'Mailbox') 

Или рельсы 3 путь:

@user.tags << Tag.where(name:'Mailbox').first_or_create!(name:'Mailbox') 
# Or, as the << method automatically saves new objects 
@user.tags << Tag.where(name:'Mailbox').first_or_initialize(name:'Mailbox') 
Смежные вопросы