0

次のエラー メッセージが表示されます。

NoMethodError in UploadStepsController#update

undefined method `attributes=' for #<ActiveRecord::Relation:0x00000104775c40>


app/controllers/upload_steps_controller.rb:12:in `update'

現在、Wicked Wizard gem を使用して、ユーザーがファイルをアップロードできるウィザードを作成しています。ここで何が欠けていますか?

upload_steps_controller.rb

class UploadStepsController < ApplicationController
include Wicked::Wizard
steps :audience, :rewards, :review

def show
    @upload = current_user.uploads
    render_wizard
end

def update
    @upload = current_user.uploads
    @upload.attributes = params[:upload]
    render_wizard @upload
end


end

アップロード.rb

class Upload < ActiveRecord::Base
attr_accessible :title, :tagline, :category, :genre, :length, :description

belongs_to :user

validates :title, presence: true
validates :tagline, presence: true
validates :category, presence: true
validates :genre, presence: true
validates :length, presence: true
validates :description, presence: true
validates :user_id, presence: true

default_scope order: 'uploads.created_at DESC'
end

新しいエラー

NoMethodError in UploadStepsController#update
undefined method `save' for #<ActiveRecord::Relation:0x0000010159c098>

app/controllers/upload_steps_controller.rb:13:in `update'
4

3 に答える 3

1

current_user.uploads は AREL オブジェクトです。したがって、どのアップロードを更新するかを指定する必要があります。たとえば、最初のユーザーのアップロード。

current_user.uploads.first.update_attributes(params[:upload])

または多分

@upload = current_user.uploads.find(params[:upload].delete(:id))
@upload.update_attributes(params[:upload])

またはすべてのレコード

@upload = current_user.uploads
@upload.update_all(params[:upload])
于 2012-05-25T19:30:49.873 に答える
0

@upload = current_user.uploads の場合、アップロード オブジェクトの配列が与えられますが、属性メソッドは単一のオブジェクトに適用されます。したがって、各メソッドを適用する必要があります

@uploads = current_user.uploads
@uploads.each do | upload|
  upload.update_attributes(params[:upload])
end
于 2012-05-26T05:07:29.367 に答える
0

代わりにこれを試してください:

@upload.update_attributes(params[:upload])
于 2012-05-25T18:59:34.537 に答える