undefined method `model_name'

三世轮回 提交于 2019-12-11 05:45:54

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!