邮箱:如何显示特定的对话?

时间:2014-02-11 23:39:47

标签: ruby-on-rails ruby mailboxer

我想向每个用户显示正在进行的对话列表。所以他们只需点击它就可以显示他们想要的对话。我很难找到如何建立此链接,因为邮箱中的会话对象没有ID。

此ID似乎存储在通知对象中,因此我尝试了此选项。

此代码来自对话索引视图

<%all_conv = current_user.mailbox.conversations%>
<%all_conv.each do |participant|%>
  <div class="ligne_conversation">
  <ul>
    <a href="conversations/<%=@conversation_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

它不起作用:所有链接都导致与id = 1的对话。

1 个答案:

答案 0 :(得分: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应用程序:

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

然后转到127.0.0.1:3000/things并查看结果

完成后,在您喜欢的文本编辑器中打开应用程序,看看脚手架是如何创建页面和控制器操作的。也许你已经完成了,也许没有,但它肯定有助于快速掌握如何在轨道上完成任务。 href中的硬编码控制器名称肯定不是最好的处理方式。