将save方法与update_attributes一起使用。这是常见的吗?

时间:2011-05-23 10:03:16

标签: ruby-on-rails ruby

用户可以注册为艺术家。用户现在需要做的就是提供他的电子邮件。

在Artist控制器中,def创建。有类似的东西是正常的吗?

  def create
    @artist = current_user

    respond_to do |format|
      if @artist.update_attributes(params[:user]) # params[:user] contains email
        @artist.is_artist = true
        @artist.save
....

在我的用户模型中,我有:

attr_accessible :email

这意味着,我不能简单地做@ artist.update_attributes(:is_artist => true)。我将不得不使用save方法。这种方法常见吗?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以在模型中定义before_create方法:

class User < ActiveRecord::Base
  ...
  before_create :fill_fields
  def fill_fields
    is_artist = true
  end
end

答案 1 :(得分:0)

我会做以下事情:

1st:如果你没有艺术家模型,我没有设置ArtistController。相反,我会在你的UserController中添加一个非restful方法,并将实现逻辑推送到模型中......

   # config/routes.rb
   resources :users do
     member {post 'signup_as_artist'}
   end

   # UserController

   def signup_as_artist
     @user = User.find(params[:id])
     @user.signup_as_artist
   end

  # User

  def signup_as_artist
    self.update_attribute :is_artist, true
  end
祝你好运