2013-03-13 2 views
0

В каждом профиле пользователя (localhost: 3000/users/username) есть список сообщений, которые пользователь сделал. Я реализовал facebox, который является лайтбокс на основе jQuery для отображения изображений при нажатии. Это код, который я использую для этого:как индивидуализировать каждый пост? (Ruby on Rails)

<a href=<%= post.image_url %> rel="facebox"><%= image_tag post.image_url(:thumb).to_s %></a> 

Проблема заключается в том, что, если пользователь сделал 5 сообщений, то же самое изображение повторяется 5 раз при нажатии для отображения в facebox.

Это мой show.html.erb где я сделать в @posts

<% provide(:title, @user.name) %> 
<div class="row"> 
    <aside class="span4"> 
    <section> 
     <h1> 
     <%= gravatar_for @user %> 
     <%= @user.name %> 
     </h1> 
    </section> 
     <br> 
    </aside> 
<br> 


    <div class="span10"> 
    <%= render 'follow_form' if signed_in? %> 
    <% if @user.posts.empty? %> 
<h3>Browse</h3> 
<% end %> 
    <% if @user.posts.any? %> 
     <ol class="posts"> 
     <%= render @posts %> 

     </ol> 

     <%= will_paginate @posts %> 
    <% end %> 
    </div> 
</div> 

и вот _post.html.erb

<script src="/jquery.js" type="text/javascript"></script> 
<link href="/src/facebox.css" media="screen" rel="stylesheet" type="text/css"/> 
<script src="/src/facebox.js" type="text/javascript"></script> 
<script language="javascript"> 

jQuery(document).ready(function($) { 
    $('a[rel*=facebox]').facebox() 
}) 

</script> 


    <li> 
     <span class="content"><%= simple_format(post.content) %></span> 
     <% if post.image.present? %> 
     <a href=<%= post.image_url %> rel="facebox"><%= image_tag post.image_url(:thumb).to_s %></a> 
     <br> 
     <% else %> 
     <% end %> 
     <span class="timestamp"> 
     Posted <%= time_ago_in_words(post.created_at) %> ago. 
     </span> 
</li> 
+2

, что это ошибка? –

+0

Нет ошибки, но когда я нажимаю на изображение, чтобы отобразить его во всплывающем окне (facebox script), повторяется одно и то же изображение, которое соответствует количеству сообщений, которые пользователь имеет. Так что если пользователь имеет 11 сообщений, изображение при нажатии на него повторяется 11 раз в одном всплывающем окне – user2159586

+0

Можете ли вы опубликовать код javascript, который вы написали, который инициализирует facebox? Я попытался создать образец проекта, чтобы воспроизвести это, но я не смог воспроизвести его, поэтому, возможно, также поможет jsFiddle, который демонстрирует это. –

ответ

0

Javascript в _post.html.erb включена и выполняется один раз для каждой должности. Поэтому, если у пользователя пять сообщений, вы инициализируете facebox пять раз. Переместите теги сценария из частичного. Вместо этого поместите их в show.html.erb, чтобы они выполнялись только один раз для всей страницы.

+0

спасибо, оцените помощь – user2159586

0

Я думаю facebox группы изображений автоматически, поскольку все они имеют одинаковый атрибут rel.

попробовать что-то вроде этого:

<%= link_to post.image_url, :rel => "facebox-#{post.id}" do %> 
    <%= image_tag post.image_url(:thumb).to_s %> 
<% end %> 
+0

. К сожалению, я получаю ту же проблему. Чтобы объяснить далее, если у меня есть 2 разных проводки изображения на localhost: 3000/users/username, и когда я нажимаю на одну из них, одно и то же изображение повторяется. Отображаемое изображение корректно, но оно повторяется в зависимости от того, сколько сообщений у пользователя. – user2159586

+0

Исследуйте сгенерированный источник HTML. Хотя я не очень хорошо знаком с facebox, это действительно похоже на то, что он пытается сгруппировать «разные» образы (все изображения с одним и тем же rel-атрибутом), которые будут отображаться одновременно. – jack

0

Если вы все еще не повезло, попытайтесь удалить атрибут отн и вызвать facebox на основе имени класса:

<%= link_to post.image_url, :class => "facebox" do %> 
    <%= image_tag post.image_url(:thumb).to_s %> 
<% end %> 

И на JavaScript:

$('a.facebox').facebox()