2012-05-25 2 views
0

Я получаю следующее сообщение об ошибке:Rails 3: Нет Методы ошибок для атрибутов

NoMethodError in UploadStepsController#update 

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


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

Я в настоящее время строю мастер, который позволяет пользователям загружать файлы, с драгоценным камнем мастера Злого. Что мне здесь не хватает?

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 

upload.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' 
+0

Загружает выглядит как множественное число? атрибуты для одной записи. –

+0

это множественное число, потому что для одного пользователя может быть несколько загрузок. есть ли способ обойти это? – user1341808

ответ

0

попробовать это Вместо этого:

@upload.update_attributes(params[:upload]) 
+0

попробовал это, не работал, к сожалению – user1341808

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]) 
+0

У меня были ошибки с атрибутами, пока я не вставил это: @upload = current_user.uploads (params [: upload]) @ upload.update_all (params [: upload]) .... . Теперь я получаю ошибку метода, неопределенный метод «save» ..... Я предполагаю, что это связано с злым волшебным камнем. Любые предложения с этим? – user1341808

+0

Загружается активная модель записи? –

+0

есть. Я разместил файл upload.rb выше. – user1341808

0

@upload = current_user.uploads, он дал вам массив загрузки объекта, но атрибуты методов, применяют для одного объект. Таким образом, вы должны применять каждый метод

@uploads = current_user.uploads 
@uploads.each do | upload| 
    upload.update_attributes(params[:upload]) 
end 
Смежные вопросы