1

コントローラに次のメソッドがあります。

def create
  p_attr=params[:upload]
  p_attr[:upload] = params[:upload][:upload].first if params[:upload][:arraydb].class == Array
  @upload = Upload.new(p_attr)

  respond_to do |format|
    if @upload.save
      @arraydb.process_name
    end
  end 
end

モデルには、保存したばかりのアップロードを処理できる別の方法があります。

def self.process_name 
  update_attributes(:user_id => current_user.id)
  update_attributes(:defined => "no")
end

process_nameメソッドが定義されていないというエラーが表示されますUpload

問題は何ですか?コントローラーからモデルに保存されたファイルの属性を更新するにはどうすればよいですか?前もって感謝します。

4

2 に答える 2

7

Rubyではself.、名前の前に定義されているメソッドはクラスメソッドです。つまり、このようなメソッドは、インスタンスではなく、クラス自体でのみ呼び出すことができます。

この意味は:

upload = Upload.new()
upload.process_name

エラーが発生します

その間:

Upload.process_name

メソッドを呼び出します。

本当にやりたいprocess_nameのはクラスのインスタンスを呼び出すことなので、メソッド定義からUpload削除することでコードを修正できます。その結果、次のようになります。self.

def process_name
    update_attributes(:user_id => current_user.id)
    update_attributes(:defined => "no")
end
于 2013-03-15T23:48:33.270 に答える
2

そうではありません-インスタンスではなく、クラスに対して定義されています。

インスタンスでそれを呼び出そうとしています。インスタンスメソッドにします。

于 2013-03-15T23:37:49.833 に答える