2013-12-08 8 views
1

Я написал код ниже, и он работает. Но я знаю, что это слишком много для файла вида, и большая часть этого кода должна быть написана в контроллерах. А потом, я попытался переписать его на контроллер, но получил сообщение об ошибкеВид, контроллер и переменные

"undefined method `group' for nil:NilClass". 

Не могли бы вы дать мне несколько советов?

【】 Перед переписывания

☆ show.html.erb (#members)

<div class="message_area"> 
       <% posts_in_groups = GroupMessage.where(:member_id => params[:id]).order("created_at desc").paginate(:page => params[:page], :per_page => 3) %> 
       <div class="each_message"> 
       <% posts_in_groups.each do |post_in_group|%> 
        <a href="/groups/<%= post_in_group.group.id %>" ><%= image_tag post_in_group.group.imageurl, :width => '20', :height => '25' %><%= "(" + post_in_group.group.name + ")" %></a> 
        <%= 'Page:' + post_in_group.page.to_s + '&' %><%= 'Line:' + post_in_group.line.to_s %> 
        (<%= post_in_group.created_at.strftime'%Y-%m-%d %H:%M' %>) 
        <div class="group_message"> 
        <p class="message_content"><a href="/group_messages/<%= post_in_group.id%>" ><%= truncate(post_in_group.content, { :length => 50}) %></a></p> 
        </div><!--group_message--> 
        <br> 
        <% end %> 
        <%= will_paginate(posts_in_groups) %> 
       </div><!--each message-- > 

      </div><!--message area--> 

【】 после перезаписи

☆ show.html.erb (#members)

<div class="message_area"> 
       <div class="each_message"> 
        <a href="/groups/<%= @post_in_group.group.id %>" ><%= image_tag @post_in_group.group.imageurl, :width => '20', :height => '25' %><%= "(" + @post_in_group.group.name + ")" %></a> 
        <%= 'Page:' + @post_in_group.page.to_s + '&' %><%= 'Line:' + @post_in_group.line.to_s %> 
        (<%= @post_in_group.created_at.strftime'%Y-%m-%d %H:%M' %>) 
        <div class="group_message"> 
        <p class="message_content"><a href="/group_messages/<%= @post_in_group.id%>" ><%= truncate(@post_in_group.content, { :length => 50}) %></a></p> 
        </div><!--group_message--> 
        <br> 
        <%= will_paginate(@posts_in_groups) %> 
       </div><!--each message-- > 
      </div><!--message area--> 

☆ members_controller

@posts_in_groups = GroupMessage.where(:member_id => params[:id]).order("created_at desc").paginate(:page => params[:page], :per_page => 3) 
@posts_in_groups.each do |post_in_group| 
@post_in_group = post_in_group 
end 

☆ GroupMessage модели

class GroupMessage < ActiveRecord::Base 
    attr_accessible :content, :member_id, :group_id, :page, :line 

    belongs_to :member 
    belongs_to :group 
    has_many :group_message_comments, :dependent => :destroy 

end 

ответ

1

Во-первых, удалите это из контроллера:

@posts_in_groups.each do |post_in_group| 
    @post_in_group = post_in_group 
end 

Он не принадлежит там, и даже если это так, для каждого элемента коллекции вы бы установите его в переменную экземпляра @post_in_group, и это не то, что вы хотите, учитывая только последнее значение.

А вот как ваш взгляд код может выглядеть следующим образом:

<div class="message_area"> 
    <% @posts_in_groups.each do |post| %> 
    <div class="each_message"> 
     <%= link_to post.group do %> 
     <%= image_tag post.group.imageurl, :width => '20', :height => '25' %> 
     <%= "(" + post.group.name + ")" %> 
     <% end %> 

     Page: <%= post.page %> & 
     Line: <%= post.line %> 
     (<%= post.created_at.strftime'%Y-%m-%d %H:%M' %>) 

     <div class="group_message"> 
     <p class="message_content"> 
      <%= link_to truncate(post.content, :length => 50), post %> 
     </p> 
     </div><!--group_message--> 

     <br>  
    </div><!--each message-- > 

    <%= will_paginate(@posts_in_groups) %> 
    <% end %> 
</div><!--message area--> 

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

+0

Большое вам спасибо, господин Мауричил Линарес. Я думаю, что ваш пересмотр является точным и правильным, но я получил сообщение об ошибке, подобное этому. undefined method 'each 'for nil: NilClass вокруг« Страница: <% = post.page> ». Понятия не имею. Итак, вы могли бы рассказать мне, почему это происходит? –

+0

Как метод 'page' реализован в классе GroupMessage? –

+0

Модель GroupMessage имеет столбец страниц и строку столбца. Я добавил модель GroupMessage в статью. –

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