неопределенный метод `model_name ' - PullRequest
1 голос
/ 25 декабря 2011

Я получаю этот неопределенный метод для контроллера альбомов и моделирую любые решения? ...

неопределенный метод `имя_модели 'для ActiveRecord :: Отношение: Класс

Извлеченный источник (вокруг строки #6):

3: >>

4: новый альбом

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

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011
=form_for @albums do |f|

Должно быть

=form_for @album do |f|

@ album vs @albums, просто угадайте здесь на основе вашего сообщения об ошибке, в вашем примере кода это выглядит правильно, не знаете, как они могут отличаться? Ошибка от нового действия?

0 голосов
/ 25 декабря 2011

Из вашего вопроса непонятно, когда происходит эта ошибка - вы разместили код на полдюжины методов, но не сказали, какой из них вызывает эту ошибку. Источник из вашей трассировки ошибки также не соответствует источнику, который вы вставили под ним.

В общем, ошибка говорит о том, что вы пытаетесь вызвать что-то вроде form_for для чего-то, что выглядит недостаточно как объект ActiveModel (вместо этого вы, похоже, передаете область видимости в form_for, что не не имеет смысла). Выполнение form_for @albums наверняка вызовет это.

...