2010-11-02 2 views
0

я следующие две моделей в моем приложении пространств, которые, как проекты & Права доступаRails Создание объекта с родителем?

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 СОЗДАТЬ, я хочу создайте пространство и разрешение с 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 
    .. 
    .. 

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

+0

Вы должны делать это с помощью обратных вызовов в моделях, а не в контроллере. Можете ли вы уточнить, когда вы хотите создать пространство. Например, когда новый пользователь или когда создается новое пространство и т. Д. – s84

+0

@Sam. Благодарю. Что вы подразумеваете под вызовами в моделях? Можете ли вы привести пример? Thansk ... Я хочу, чтобы это произошло, когда пользователь создает новое пространство. – AnApprentice

ответ

2

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

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

в модели пользователя

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

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