2014-02-11 1 views
2

Я хочу показать форту каждому пользователю список текущих разговоров. Поэтому они могут просто нажать на нее и отобразить желаемый разговор. Мне трудно найти, как сделать эту ссылку, поскольку объект беседы в почтовом ящике не имеет идентификатора.Mailboxer: как отобразить конкретную беседу?

Этот идентификатор, кажется, хранится в объекте уведомления, поэтому я попробовал эту опцию.

Этот код пришел с точки зрения индекса разговор

<%all_conv = current_user.mailbox.conversations%> 
<%all_conv.each do |participant|%> 
    <div class="ligne_conversation"> 
    <ul> 
    <a href="conversations/<%[email protected]_id%>"> 
     <li> 
     <%=image_tag participant.messages.last.sender.avatar.url(:thumb) %> 
     <%=participant.messages.last.sender.name%>     
     <%=participant.messages.last.body%> 
     </li> 
    </a> 
    </ul></div> 

Переменная @conversation_id экземпляр является определить в моем контроллере разговор

def index 
    if current_user.mailbox.conversations.any? 
    notification = Notification.find_by!(params[:id]) 
    @conversation_id = notification.conversation_id 
    end 
end 

Это не работает: все ссылки ведут к разговору с идентификатором = 1.

ответ

2

Я предполагаю, что если кто-то нажимает на ссылку для разговора, он перейдет к вашему контроллеру разговора и будет искать def show и не def index , Поэтому вам нужно иметь что-то вроде:

def show 
     @conversation = Conversation.find(params[:id]) 
     respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @conversation } 
    end 
    end 

В контроллере указательным вам нужно сделать:

def index 
     @conversations = current_user.mailbox.conversations 

Наконец, по вашему мнению вы перебрать @conversations как

@conversations.each do |c| 
    <a href="conversations/<%= c.id %> 

Вы могли бы хотите посмотреть link_to и url_for, чтобы сделать его более элегантным, но выше будет работать.

Вот очень простой совет для начала в вашем Rails приключения:

Создать новую рельсы приложение:

rails new learncrud 
    cd learncrud 
    rails g scaffold thing name body something:int 
    rake db:migrate 
    rails s 

затем пойти в 127.0.0.1:3000/things и посмотреть на результат

Когда вы откроете приложение в своем любимом текстовом редакторе и посмотрите, как scaffolder создал страницы и действия контроллера. Может быть, вы это сделали, может быть, нет, но это помогает быстро понять, как все можно сделать в рельсах. Имена контроллеров жесткого кодирования в href - это не лучший способ сделать что-то.

+0

Спасибо за ваш ответ, это сработало. Я забыл упомянуть, что я уже добавил '@conversation = Conversation.find (params [: id])' в мое действие show. Я был недопониманием (и, возможно, еще), как найти этот специальный идентификатор. Вы правы: это мое первое приложение после некоторого времени обучения. Я буду следовать твоему совету, мне нужно столько узнать, что это не повредит. – Ruff9

+0

Отличный источник знаний о том, как http://www.railscasts.com, и многие из этих учебных пособий доступны бесплатно. Лучшие видеоролики Ryan Bates. –

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

  • Нет связанных вопросов^_^