问题
i am getting this undefined method for albums controller and model any solutions?...
undefined method `model_name' for ActiveRecord::Relation:Class
Extracted source (around line #6):
3: >>
4: new album
5:
6: = form_for @albums do |f|
7: = f.error_messages
8: %p
9: = f.label :name
=link_to 'albums', albums_path
>>
new album
= form_for @album do |f|
= f.error_messages
%p
= f.label :name
= f.text_field :name
%p
= f.label :description
= f.text_field :description, :rows => 3
%p
= f.submit
%p= link_to "Back to List", albums_path
class AlbumsController < ApplicationController
before_filter :authenticate_user!
respond_to :html
respond_to :json
def index
@albums = current_user.albums.paginate :page => params[:page], :per_page => 9, :order => 'created_at DESC'
respond_with @albums, :aspect => @aspect
end
def create
aspect = params[:album][:to]
@album = current_user.post(:album, params[:album])
if @album.persisted?
redirect_to :action => :show, :id => @album.id, :aspect => aspect
else
redirect_to albums_path(:aspect => aspect)
end
end
def new
@album = Album.new
end
def destroy
@album = current_user.find_visible_post_by_id params[:id]
@album.destroy
respond_with :location => albums_url
end
def show
@person = current_user.visible_people.find_by_person_id(params[:person_id]) if params[:person_id]
@person ||= current_user.person
@album = :uploads if params[:id] == "uploads"
@album ||= current_user.find_visible_post_by_id(params[:id])
unless @album
render :file => "#{Rails.root}/public/404.html", :layout => false, :status => 404
else
if @album == :uploads
@album_id = nil
@album_name = "Uploads"
@album_photos = current_user.visible_posts(:_type => "Photo", :album_id => nil, :person_id => @person.id)
else
@album_id = @album.id
@album_name = @album.name
@album_photos = @album.photos
end
respond_with @album
end
end
def edit
@album = current_user.find_visible_post_by_id params[:id]
redirect_to @album unless current_user.owns? @album
end
def update
@album = current_user.find_visible_post_by_id params[:id]
if current_user.update_post( @album, params[:album] )
respond_with @album
else
render :action => :edit
end
end
end
class Album < ActiveRecord::Base
include ROXML
xml_attr :name
xml_attr :description
belongs_to :user
belongs_to :person
validates :person, :presence => true
has_many :photos, :class_name => 'Photo', :foreign_key => :album_id
validates_presence_of :name
validates :person, :presence => true
before_destroy :destroy_photos
attr_accessible :name
end
回答1:
=form_for @albums do |f|
Should be
=form_for @album do |f|
@album vs @albums, just guessing here based on your error message, in your code example it looks correct, not sure how they could differ? The error is from the new action?
回答2:
It's not clear from your question when this error is happening - you've posted the code to half a dozen methods but you haven't said which one is causing this error. The source from your error backtrace also doesn't match the source you pasted just below it.
What the error is saying broadly is that you trying to call something like form_for
on something that doesn't look enough like an ActiveModel
object (instead you seem to be passing a scope to form_for
, which doesn't make sense). Doing form_for @albums
would certainly trigger this.
来源:https://stackoverflow.com/questions/8630018/undefined-method-model-name