【问题标题】:Where to place methods from a gem在哪里放置 gem 中的方法
【发布时间】:2012-11-11 12:19:29
【问题描述】:

我正在使用以下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

【问题讨论】:

    标签: ruby-on-rails view methods controller


    【解决方案1】:

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

    以下是您的代码发生的情况:

    解析模板时会调用 m.mark_as_read,因此在呈现页面时,您的所有消息实际上都已标记为已读。由于 m.mark_as_read 返回 true,因此您会得到 html &lt;a href='true'&gt;Mark Read&lt;/a&gt;,这会导致您在路由到该路径时指定的错误。

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

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 2019-09-18
      相关资源
      最近更新 更多