2012-01-24 2 views
0

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

Я пытаюсь отобразить альбомы/_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 

сайта 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

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

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

В _album.html.erb частичной, необходимо ссылаться на атрибут альбома в качестве локального атрибута , как и

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

Вы можете прочитать больше о парциальных здесь 3.4.5 Rendering Collections

+0

Пробовал выше, но до сих пор не работают. Все работает отлично, за исключением случаев, когда у меня есть '<% = @ album.title%>' rails говорит undefined method 'title ' – coletrain

+1

Атрибут экземпляра" @album "никогда не определен в SiteController, поэтому вы не можете его использовать. Попробуйте использовать локальный атрибут <% = album.title%> –

+0

YOU THE MAN! благодаря :) – coletrain

Смежные вопросы