我想向每个用户显示正在进行的对话列表。所以他们只需点击它就可以显示他们想要的对话。我很难找到如何建立此链接,因为邮箱中的会话对象没有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的对话。
答案 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中的硬编码控制器名称肯定不是最好的处理方式。