如何在创建更多2个模型上关联current_user?

时间:2012-03-10 05:08:49

标签: ruby-on-rails ruby ruby-on-rails-3.1

我想关联current_user当我将这些对象关联到Bar创建时,另一件事,这是对的吗?或者我应该在类型控制器上执行此操作吗?

模型栏

belongs_to :type
belongs_to :user

型号

has_many :bars

模型用户

has_one :bar

条形码控制器

def new
  @bar = Bar.new(:type_id => @type.id)
end

def create
  @bar = current_user.build_bar(params[:bar].merge(:type_id => @type.id))
  if  @bar.save     
  flash.now[:success] = "wohoo!"
    render  :edit
  else
    render  :new 
  end
end

1 个答案:

答案 0 :(得分:1)

以下是通过关联创建模型的一般Rails方法 - 假设在登录期间或其他地方设置了current_user,并且在before_filter中正确设置了@type。

Bar Controller

def new
  @bar = current_user.bar.build
end

def create
  @bar = current_user.bar.build(params[:bar].merge(:type_id => @type.id))
  if  @bar.save     
    flash.now[:success] = "wohoo!"
    redirect_to @bar
  else
    render  :new 
  end
end

通过这种方式建立关联会自动将栏上的user_id字段设置为current_user.id

另请注意,您可能希望在成功案例中redirect_to而不是render。如果您想直接编辑,请转到用户redirect_to edit_bar_path(@bar)。如果您想查看有关原因的更多信息,请查看讨论渲染v重定向的Layouts and Rendering Rails Guide及其含义。