Rails: установить создателя Entry - PullRequest
0 голосов
/ 29 марта 2012

В настоящее время я могу добавить creator_id следующим образом:

@entry = Entry.new(params[:entry].merge(:creator => current_user._id))

Если это моя модель:

class Entry
  include Mongoid::Document

belongs_to :User

  field :creator, :type => String
  field :title, :type => String
  field :content, :type => String
  field :scorea, :type => Integer
  field :scoreb, :type => Integer
  field :scorec, :type => Integer
end

Есть ли лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 29 марта 2012

Ваша модель выглядит не очень хорошо, вы действительно хотите сохранить user_id в строковом поле?

Я предлагаю вам сменить модель на следующую:

class Entry
  include Mongoid::Document

  belongs_to :creator, :class_name => 'User', :inverse_of => :entries

  # field definitions
end

class User
  include Mongoid::Document

  has_many :entries, :inverse_of => :creator
end

После того, как вы смените модели, вы можете продолжать использовать то, что вы есть сейчас или альтернативно:

@entry = current_user.entries.build(params[:entry])

Обновление:

Метод инициализации записи не сильно отличается от того, как я это сделал. Это больше похоже на рельсовый способ ведения дел. Основное отличие в том, что вы не использовали ассоциации. Из определений модели ясно, что вы хотите установить связь «один ко многим» между пользователем и записями, и именно так вы создаете такие ассоциации. С ассоциациями связано много приятностей, например, вы можете делать следующие вещи:

user.entries << entry # add a entry to users, will automatically change entry.creator_id
entry.creator = user  # sets creato_id = user_id
entry.creator         # returns associated user. no need to do User.find(entry.creator_id)
user.entries          # returns all entries for use <=> Entry.where(creator_id: user.id)

для более подробной информации перейдите на http://mongoid.org/docs/relations.html

0 голосов
/ 29 марта 2012

Вы можете сделать это следующим образом

   @entery = Entery.new(params[:entry])
   @entery.creator = current_user
   or
   @entery.creator_id = current_user.id 

hence you can assigned id of creator to this entery.
0 голосов
/ 29 марта 2012

Нет лучшего способа сделать. Или вы можете сделать это в 2 строки:

@entry = Entry.new(params[:entry])
@entry.creator = current_user._id

этот второй случай позволяет добавить поле creator в attr_protected

...