Rails строит объект, у которого есть родитель? - PullRequest
0 голосов
/ 02 ноября 2010

У меня есть следующие две модели в моем приложении Spaces, которые похожи на проекты и разрешения

class Space < ActiveRecord::Base
 has_many :permissions
 has_many :users, :through => :permissions

class Permission < ActiveRecord::Base
  belongs_to :user 
  belongs_to :space
  belongs_to :role
  validates_presence_of :space_id , :user_id, :role_id

Итак, вот что я хотел бы сделать в Space Controller, когда пользователь выполняет DEF CREATEЯ хочу создать пространство и разрешение с role_id = 1, чтобы обеспечить пространство / проект в качестве создателя в качестве члена ...

Вот что у меня есть.Это становится грязным и не создает разрешения

Space Controller:

def create
  @space = current_user.spaces.new(params[:space].merge(:creator => current_user.id))
  @space.permissions.new(:role_id => 1, :user_id => current_user.id)
  respond_to do |format|
    if @space.save
    ..
    ..

Спасибо за вашу помощь

1 Ответ

2 голосов
/ 02 ноября 2010

Обратные вызовы - это то, как рельсы работают с бизнес-логикой, которая применяется к моделям или их ассоциациям после одного из действий CRUD.

например. Если вы хотите создать пробел с 1 разрешением и у этого разрешения есть одна роль, вы можете сделать что-то вроде этого.

в вашей пользовательской модели

def before_create
   User.permissions << Permision.create({:role_id => 1})
end 

Взгляните на обратные вызовы в rails API . Они заберут большую часть вашей логики из контроллера и облегчат обслуживание в вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...