Rails在不同的控制器中呈现站点

时间:2012-03-10 17:23:52

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个rails网站,我想通过仪表板呈现实时网站。我已经为网站的后端创建了一个仪表板,但是当用户进行更改时,我希望他们先看到它。

这是我的

Dashboard.rb

has_many :profiles, :dependent => :destroy

has_many :blogs, :through => :profile, :dependent => :destroy
has_many :videos, :through => :profile, :dependent => :destroy
has_many :albums, :through => :profile, :dependent => :destroy

信息中心index.html

<%= render :partial => 'profiles/profile', :locals => {:profile => @profile} %>

Profile.rb

belongs_to :dashboard
has_many :blogs, :dependent => :destroy
has_many :videos, :dependent => :destroy
has_many :albums, :dependent => :destroy

_profile.html.erb

<h1><%= @profile.name %></h1>

<% album = @profile.albums.last %>
<% if album.blank? %>
<%= link_to 'Create a new album', new_album_path %></br>
<% else %>
<%= render :partial => 'albums/album', :locals => {:album => @profile.albums.last} %>   
<% end %>

<% blog = @profile.blogs.last %>
<% if blog.blank? %>
<%= link_to 'Create a blog post', new_blog_path %><br/>
<% else %>
<%= render :partial => 'blogs/blog', :locals => {:blog => @profile.blogs.last}%>
<% end %>

<% video = @profile.videos.last %>
<% if video.blank? %>
<%= link_to 'Add new video', new_video_path %></br>
<% else %>
<%= render :partial => 'videos/video', :locals => {:video => @profile.videos.last} %>
<% end %>

当我通过前端查看网站时上述工作正常但是当我试图通过仪表板查看时我得到了错误

  

nil的未定义方法`name':NilClass

这是profile.name行

如果我删除上面的行,我会得到

  

未定义的方法`显示'为nil:NilClass

任何人都有任何建议我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您确定在仪表板控制器中定义了@profile吗?似乎@profile未定义。

答案 1 :(得分:1)

需要@profile找到控制器内部。如果params id无效,那么它将重定向到根URL,如果有效,它将呈现页面。

def index
  @profile = Profile.find_by_id(params[:id])
  @profile || invalid_url!
end

private
def invalid_url!
  flash[:error] = 'URL is not valid !'
  redirect_to root_url
end