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 %>

发送的消息.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

您会看到第二个参数始终是当前用户。所以它正在返回当前用户的交互。

于 2013-03-11T06:40:26.750 回答