0

私は次の行為をメッセージのメッセージ宝石として使用しています。宝石は、メッセージを既読としてマークするには、次のことを行うと述べています。

@ 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 に答える