간단한 개인용 메시징 플러그인 (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? 이것에 대한 도움은 크게 감사 할 것입니다. 당신이 컨트롤러를 보면
터미널에서 rails console을 입력하여 콘솔을 시작하고 Message.all을 입력하십시오. 이것은 Messages 테이블 안의 모든 레코드를 반환합니다. 누락 된 ID가 있는지 확인하십시오. 메시지가 올바른 사용자에게 태그 지정되는지 확인하십시오. –
감사합니다. 나는 recipient_id : nil 모두를 알아 차렸다. "받는 사람"상자를 어떻게 처리해야하는지 알고 있습니까? '이름'을 사용하려고했습니다 – syk
테이블을 보면 정수로 설정되어있는 것을 볼 수 있습니다. 어떤 ID를 기다리고 있습니까? ID를 삽입 해보십시오. 괜찮습니다. :) –