2013-03-11 1 views
0

간단한 개인용 메시징 플러그인 (https://github.com/jongilbraith/simple-private-messages)을 설치했지만 user.login이 아닌 user.name을 사용하여이 문제를 해결하는 데 몇 가지 문제가있었습니다. 어떤 오류 메시지도 표시되지 않지만 보낸 메시지가 수신되지 않고 "보낸"아래에 아무 것도 표시되지 않는 것으로 보입니다. 여기에 첫 번째내 비공개 메시징 기능을 내 레일 앱에 올바르게 설정해야합니까?

메시지에 대한

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 

메시지

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

메시지가

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

내가 잘못된 일을 했습니까 sent.html.erb index.html.erb? 이것에 대한 도움은 크게 감사 할 것입니다. 당신이 컨트롤러를 보면

+0

터미널에서 rails console을 입력하여 콘솔을 시작하고 Message.all을 입력하십시오. 이것은 Messages 테이블 안의 모든 레코드를 반환합니다. 누락 된 ID가 있는지 확인하십시오. 메시지가 올바른 사용자에게 태그 지정되는지 확인하십시오. –

+0

감사합니다. 나는 recipient_id : nil 모두를 알아 차렸다. "받는 사람"상자를 어떻게 처리해야하는지 알고 있습니까? '이름'을 사용하려고했습니다 – syk

+0

테이블을 보면 정수로 설정되어있는 것을 볼 수 있습니다. 어떤 ID를 기다리고 있습니까? ID를 삽입 해보십시오. 괜찮습니다. :) –

답변

0

/당신은 두 번째 매개 변수는 항상 현재 사용자임을 알

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

을 보여줍니다. 따라서 현재 사용자의 상호 작용을 반환합니다.

+0

시도하고 있습니다. 이 메시지를 최하위의 메시지 컨트롤러에서 변경하십시오. "def set_user @user = User.first end"....하지만 그렇게하면 더 이상 "message.sender.name"과 같은 코드를 사용할 수 없게됩니다. ""이름 "은 정의되지 않습니다. 이 경우 현재 사용자에게 "@user"를 설정할 수 있습니까? – syk

+0

내 말은, 나는 링크를 수정하는 @user = current_user로 설정하려했지만 ... 실제로는 – syk

+0

을 클릭하면 "이름"에 정의되지 않는다. 나는 current_user를 사용하여이를 수정했다. 그러나, 하나 남은 문제는 이것입니다. '보낸'을 클릭하면 '경로 일치 없음 {: 동작 =>'표시 ', : 컨트롤러 =>'사용자 '}' '가 표시됩니다. 이 마지막에 대한 아이디어는 없나요? – syk

관련 문제