как правильно показывать? - PullRequest
1 голос
/ 12 марта 2012

Я должен показать, что некоторые камни принадлежат пещере, а пещера принадлежит пользователю!хорошо кажется достаточно справедливым, верно?но почему скалы показывают, что подоконник не распознает пещеру?здесь мы идем:

модель скалы

belongs_to :cave

модель пещеры

has_many :rocks

модель пользователя

has_one :cave

рок-контроллер

def new 
    @rock = Rock.new
  end

    def show
     @cave = Cave.find(params[:cave_id])
       @rock = @cave.rocks
    end

  def create  
    @rock = current_user.cave.rocks.build(params[:rock]) 
    if @rock.save
      flash.now[:success] = "Ya Man"
      redirect_to :action => :show
    else
      render :new    
  end
end

представление рок-шоу

<h2><%= @rock.cave.name %></h2>

ошибка

undefined method `cave' for nil:NilClass

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

В действии show, @cave.rocks возвращает ноль, поэтому вы присваиваете ноль @rock. Кстати, я думаю, что он возвращает коллекцию, и у вас там не будет элемента рок, возможно, вы захотите использовать @cave.rocks.first.

Кроме того, довольно странно иметь показательное действие на контроллере камней, который берет идентификатор пещеры и находит камень на его основе. Более стандартным подходом было бы получить идентификатор рок.

1 голос
/ 12 марта 2012

В действии шоу, в вашей строке:

@rock = @cave.rocks

Вы присваиваете (вероятно) ActiveRelation переменной @rock. cave.rocks вернет коллекцию камней, принадлежащих этой пещере.

Вы могли бы позвонить @rock = @cave.rocks.first, но обычной практикой в ​​представлении было бы показывать все камни, связанные с пещерой, а не только первую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...