我正在使用以下Acts as message gem来发送消息。 gem声明要将消息标记为已读取,请执行以下操作:
@ message.mark_as_read
下面是我的代码,我在其中迭代每条消息,然后我试图在视图中将消息标记为已读,但这不起作用。我收到错误“无法找到ID为true的商店”
通常我会在控制器或模型中设置一个方法来处理gem的方法,但是我很困惑我应该如何做到这一点,因为gem指的是数据库中的表,不需要新的模型或控制器。这真让我抓狂!我应该把这些方法放在哪里(还有更多这样的方法)?
任何想法?
<% @messages.each do |m| %>
<tr>
<td>
<%= link_to 'Mark Read', "#{m.mark_as_read}", :class => 'btn btn-mini' %>
</td>
</tr>
<% end %>
我的模特
class User < ActiveRecord::Base
acts_as_messageable :table_name => "messages", # default 'messages'
:required => [:topic, :body], # default [:topic, :body]
:class_name => "ActsAsMessageable::Message", # default "ActsAsMessageable::Message",
:dependent => :nullify # default :nullify
end
答案 0 :(得分:1)
您不能简单地添加一个调用上述方法的链接。
以下是您的代码所发生的情况:&lt;%= link_to'Mark Read',“#{m.mark_as_read}”%&gt;
解析模板时会调用m.mark_as_read,因此在呈现页面时,所有邮件实际上都已标记为已读。由于m.mark_as_read返回true,因此您将获得html <a href='true'>Mark Read</a>
,这会导致您在路由到该路径时指定的错误。
您需要做的是创建一个动作(最好在MessagesController中),您可以在其中将消息标记为已读,然后将链接指向该地址,