0

シンプルなプライベート メッセージング プラグイン ( https://github.com/jongilbraith/simple-private-messages ) をインストールしましたが、user.name (user.login ではない) を使用してこれを機能させようとすると、いくつかの問題が発生しました。エラーメッセージは表示されませんが、送信されたメッセージが受信されておらず、「送信済み」の下に何も表示されていないようです。

まず、ユーザーのスキーマは次のとおりです

create_table "users", :force => true do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at",                         :null => false
    t.datetime "updated_at",                         :null => false
    t.string   "password_digest"
    t.string   "remember_token"

メッセージのスキーマ

create_table "messages", :force => true do |t|
    t.integer  "sender_id"
    t.integer  "recipient_id"
    t.boolean  "sender_deleted",    :default => false
    t.boolean  "recipient_deleted", :default => false
    t.string   "subject"
    t.text     "body"
    t.datetime "read_at"
    t.datetime "created_at",                           :null => false
    t.datetime "updated_at",                           :null => false
  end

メッセージコントローラークラス MessagesController < ApplicationController

  before_filter :set_user

def index
if params[:mailbox] == "sent"
  @messages = @user.sent_messages
else
  @messages = @user.received_messages
end
end

def show
@message = Message.read_message(params[:id], current_user)
end

def new
@message = Message.new

if params[:reply_to]
  @reply_to = @user.received_messages.find(params[:reply_to])
  unless @reply_to.nil?
    @message.to = @reply_to.sender.name
    @message.subject = "Re: #{@reply_to.subject}"
    @message.body = "\n\n*Original message*\n\n #{@reply_to.body}"
  end
end
end

def create
@message = Message.new(params[:message])
@message.sender = @user
@message.recipient = User.find_by_name(params[:message][:to])

if @message.save
  flash[:notice] = "Message sent"
  redirect_to user_messages_path(@user)
else
  render :action => :new
end
end

def delete_selected
if request.post?
  if params[:delete]
    params[:delete].each { |id|
      @message = Message.find(:first, :conditions => ["messages.id = ? AND (sender_id = ? OR recipient_id = ?)", id, @user, @user])
      @message.mark_deleted(@user) unless @message.nil?
    }
    flash[:notice] = "Messages deleted"
  end
  redirect_to :back
end
end

private
def set_user
 @user = User.first
end
end

メッセージ モデル

class Message < ActiveRecord::Base
  attr_accessible :to, :subject, :body
  is_private_message

  attr_accessor :to

end

メッセージ index.html.erb

<%= form_tag delete_selected_user_messages_path(@user, :method => :post) do %>
    <% if params[:mailbox] == "sent" %>
            <%= render :partial => "sent" %>
    <% else %>
            <%= render :partial => "inbox" %>
        <% end %>
<% end %>

Messages sent.html.erb

<h2>Sent</h2>
<table>
    <tr>
        <th>Del?</th>
        <th>Subject</th>
        <th>To</th>
        <th>Sent</th>
    </tr>
    <% if @messages.size == 0 %>
        <tr>
            <td colspan="4">
                No messages
            </td>
        </tr>
    <% else %>
        <% for message in @messages %>
            <tr>
                <td><%= check_box_tag "delete[]", message.id %></td>
                <td><%= link_to h(message.subject), user_message_path(@user, message) %></td>
            <td><%= link_to h(message.recipient.login), user_path(message.recipient) %></td>
              <td><%=h message.created_at.to_s(:long) %></td>
            </tr>
        <% end %>
        <tr>
            <td colspan="4">
                <%= submit_tag "Delete" %>
            </td>
        </tr>
    <% end %>
</table>
<%= link_to "Inbox", user_messages_path(@user)%>

私は何か間違ったことをしましたか?これに関するヘルプは大歓迎です。

4

1 に答える 1

0

コントローラー/ショーを見ると

def show
  @message = Message.read_message(params[:id], current_user)
end

2 番目のパラメーターは常に現在のユーザーであることがわかります。したがって、現在のユーザーのインタラクションを返しています。

于 2013-03-11T06:40:26.750 に答える