2009-08-06 63 views
1

我有这样的代码:管理优化@视图

<% if @photos.blank? %> 
    No Pic 
<% else %>  
<center> 
    <table> 
     <tr> 
    <% @photos.each do |c| %> 
     <td> 
<%= image_tag(url_for({:action => 'image', :id => c.id}),:width =>'20%', :height =>'20%') %><br> 
    <%= link_to "lihat" , {:action => 'show2', :id => c.id} -%> 
     <% if logged_in? %> 
     <small> <%= link_to 'Edit', {:action => "edit2", :id => c.id } %></small> 
     <small> <%= link_to 'Delete', {:action => "delete2", :id => c.id }, :confirm => "apakah anda yakin mau mengapus berita ini?" %></small> 
     <% end %> 
     </td> 

     <% end %> 
      </tr> 

    </table> 
</center> 

<% end %> 

我想打印我的图片“如果列= 5”全自动添加每行
或5图像 输出: [图像] [图像] [图片] [图片] [图片]

我该怎么处理我的代码?请帮我

回答

3

有几个方法,你可以解决“5张照片上一行”的问题,但我认为这是最传神:group照片的排列为5行,并使用嵌套.each循环:

rows = @photos.in_groups_of(5) 
rows.each do |row| 
    <tr> 
    row.each do |photo| 
    <td> 
    #display photo here 
    </td> 
    end 
    </tr> 
end 

请注意,如果你没有在你的最后一行5张照片,array#in_groups_ofnil意志垫,除非你指定替代默认。

+0

方式更好的答案比我想(用each_with_index和MOD 5)。很干净! – mixonic 2009-08-06 13:20:45

+0

仍然错误!如果我使用each_with_index作为例子,我该如何输入? – 2009-08-06 19:06:10

+0

你能更具体地了解这个错误吗?它与Array#in_groups_of没有直接关系,然后是Array#each_with_index(我提到的'两种方法'中的第二个;))可能无法帮助你! – 2009-08-07 02:01:03

1

你可以做这样的事情

@photos.each_slice(5) do |slice| 
    slice.each do |photo| 
    # render photo.name, photo.title...etc here 
    end 
end 
0
if i modified with slice : 

<h1>All Photos</h1> 

<% @photos.each_slice(5) do |slice| -%> 
    <% slice.each do %> 

<h2><%= link_to photo.title, 
photo_path(:user_id => photo.user, :id => photo) %></h2> 
<p> 

     <%= image_tag(url_for({:action => 'image', :id => photo.id}),:width => '10%',:height => '10%') %> 
<br> 
<% if is_logged_in? and logged_in_user.id == @user.id -%> 


<%= link_to 'Destroy', photo_path(:user_id => photo.user, :id => photo), 
:confirm => 'Are you sure?', :method => :delete %> 
<% end %> 

<% end -%> 
</p> 
<% end -%> 

错误:

显示照片/ index.html.erb其中第5行提出:

未定义的方法`标题'为#

提取的源(围绕线#5):

2: 
3: <% @photos.each_slice(5) do |slice| -%> 
4: <% slice.each do %> 
5: <h2><%= link_to slice.title, 
6: photo_path(:user_id => photo.user, :id => photo) %></h2> 
7: <p> 
8: 

,我试图与修改:

<% rows = @photos.in_groups_of(5)%> 
<% rows.each do |row| %> 
    <tr> 
    <% row.each do |photo| %> 
    <td> 
    <%= image_tag(url_for({:action => 'image', :id => photo.id}),:width => '10%',:height => '10%') %> 
    </td> 
    <% end %> 
    </tr> 
<% end %> 

错误:

RuntimeError in Photos#index 

显示照片/索引.html.erb在哪里行#6提出:

名为id的零,这将被错误地4 - 如果你真的想零的ID,请使用OBJECT_ID

提取的源(大约6号线):

3: <tr> 
4: <% row.each do |photo| %> 
5:  <td> 
6:  <%= image_tag(url_for({:action => 'image', :id => photo.id}),:width => '10%',:height => '10%') %> 
7:  </td> 
8: <% end %> 
9: </tr> 

是我错了吗?

0

看起来好像你已经碰到我在原来的答复中提到的问题:

“请注意,如果你没有5张照片上你的最后一行,除非nil意志array#in_groups_of它垫你指定一个替代的默认值。“

试试这个:

<tr> 
<% row.each do |photo| %> 
    <td> 
    <% if photo %> 
     <%= image_tag(url_for({:action => 'image', :id => photo.id}),:width => '10%',:height => '10%') %> 
    <% end %> 
    </td> 
<% end %> 
</tr> 
+0

哈哈现在我明白你的意思谢谢你的回答 – 2009-08-07 07:12:14

0

我进行了修改:

<% rows = @photos.in_groups_of(5)%> 
<% rows.each do |row| %> 
    <tr> 
    <% row.each do |photo| %> 
    <td> 
     <% if photo do %> 
    <%= image_tag(url_for({:action => 'image', :id => photo.id}),:width => '10%',:height => '10%') %> 
     <% end %> 
    </td> 
    <% end %> 
    </tr> 
<% end %> 

结果:

SyntaxError in Photos#index 

Showing photos/index.html.erb where line #15 raised: 

compile error 
D:/Rails/rails_apps/pameran_teknologi/app/views/photos/index.html.erb:15: syntax error, unexpected $end, expecting kEND 

Extracted source (around line #15): 

12: <% end %> 
13: 

but if i modify like this : 

<% row.each do |photo| %> 
    <td> 
     <% if photo %> // without 'do' 
    <%= image_tag(url_for({:action => 'image', :id => photo.id}),:width => '10%',:height => '10%') %> 
     <% end %> 
    </td> 
    <% end %> 

结果:

alt text http://kuyarails.jimdo.com/s/cc_images/cache_1636419413.jpg?t=1249628156

+0

我想每行5个图片..但不是工作 – 2009-08-07 06:59:04

0

我在这里改变了代码一点点

slice.each do |photo| 
    # photo.name, photo.title... 
end