Rails 3 визуализирует частичный внешний вид? - PullRequest
0 голосов
/ 24 января 2012

Я работаю над мультисайтом для клиента для сайта по скейтбордингу. Пока все отлично, но я начинаю зацикливаться на частичном. У меня есть сайт и сайт has_many: album (альбом также принадлежит сайту), но когда я пытаюсь отобразить альбомы с сайта на домашней странице сайта, я получаю неопределенный метод `model_name 'для NilClass: Class ?

Я пытаюсь отобразить альбомы / _album.html.erb на страницах сайтов / шоу, чтобы отобразить альбом последней версии сайта на главной странице сайта.

Контроллер альбомов

class AlbumsController < ApplicationController

  def index
    @albums = Album.all
  end

  def show
    @album = Album.find(params[:id])
  end

  def new
    @album = Album.new
  end

  def edit
    @album = Album.find(params[:id])
  end

  def create
    @album = current_site.albums.build(params[:album])

    if @album.save
     redirect_to albums_path, :notice => 'Album was successfully created.'
    end
  end

  def update
    @album = Album.find(params[:id])

    if @album.update_attributes(params[:album])
     redirect_to album_path(@album), :notice => 'Album was successfully updated.'
    end
  end

  def destroy
    @album = Album.find(params[:id])
    @album.destroy
  end
end

Контроллер сайтов

class SitesController < ApplicationController

  def index
    @sites = Site.all
  end

  def show
    @site = Site.find_by_subdomain!(request.subdomain)
  end

  def new
    @site = Site.new
  end

  def edit
    @site = Site.find(params[:id])
  end

  def create
    @site = Site.new(params[:site])

    if @site.save
     redirect_to @site, :notice => 'Signed up!'
    end
  end

  def update
    @site = Site.find(params[:id])

    if @site.update_attributes(params[:site])
      redirect_to @site, :notice => 'Site was successfully updated.'
    end
  end

  def destroy
    @site = Site.find(params[:id])
    @site.destroy
  end
end

Site Show.html

<p id="notice"><%= notice %></p>

<p>
  <b>First name:</b>
  <%= @site.first_name %>
</p>

<p>
  <b>Last name:</b>
  <%= @site.last_name %>
</p>

<p>
  <b>Subdomain:</b>
  <%= @site.subdomain %>
</p>

<%= render :partial => 'albums/album'%>

<%= link_to 'Edit', edit_site_path(@site) %> |
<%= link_to 'Back', sites_path %>

Альбомы / _album.html.erb

<%= div_for @album do %>
  <h2><%= @album.title %></h2>
   <%= image_tag @album.photo.url(:small) %>
<% end %>

Я что-то упустил в контроллере альбомов?

1 Ответ

1 голос
/ 24 января 2012

В вашем show.html вам нужно передать коллекцию альбомов методу рендеринга

<%= render :partial => 'albums/album', :collection => @site.albums %>

В частичном _album.html.erb вам нужно ссылаться на атрибут album как локальныйатрибут, например, так:

<%= div_for album do %>
  <h2><%= album.title %></h2>
  ...

Подробнее о частичках вы можете прочитать здесь 3.4.5 Рендеринг коллекций

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