0

我正在使用以下行为作为消息的消息宝石。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
4

1 回答 1

1

您不能像上面那样简单地添加一个调用方法的链接。

以下是您的代码发生的情况: <%= link_to 'Mark Read', "#{m.mark_as_read}" %>

m.mark_as_read 在模板被解析时被调用,所以当你的页面被渲染时,你所有的消息实际上已经被标记为已读。由于 m.mark_as_read 返回 true,因此您将获得<a href='true'>Mark Read</a>导致您在路由到该路径时指定的错误的 html。

您需要在此处创建一个操作(最好在 MessagesController 中),您可以在其中将消息标记为已读,然后将链接指向该地址,

于 2012-11-23T10:01:33.423 回答