新手想做做一個類似FB訊息的東西
所以msg裡面有 user_id (寄件人) touser(收件人) content(訊息內容)
unread(判斷是否已讀) newmessage(收到新訊息的數量)
我想問的問題是
一.有寄件人和收件人都使用user這個資料庫 要怎麼做關聯?
class Msg < ActiveRecord::Base
belongs_to :owner, :class_name => "User", :foreign_key => :user_id
end
>>我想到的方法是 current_user.msgs.new 來關聯user和msgs
但是收件人的部分 我是根據view獲得的名稱來尋找id
來判斷要寄給誰並且判斷是否為使用者 下面*註一
def validate_user
User.find_by_name(params.require(:msg).permit(:touser)[:touser])
end
二.已知道收件人 如何做回復訊息
>>我想到的方法有 1.把變數user傳到另外一個頁面 但是這部分失敗..一直收不到
這部分想問要如何做
2.也是我目前的作法 #給回復用 *註二
做在同一頁面 然後再view的show的頁面直接提取收件人id
以上功能是都ok 但是想問做法會不會太奇爬Q_Q,或是效率太差
先感謝大大指教
# msgs_controller
def index
@msgs=Msg.where(touser: current_user.name).order("updated_at DESC")
#找收件人是自己的msgs
current_user.update_attribute("newmessage", "0") #進到訊息箱就清掉提示
end
def show
begin
current_user.update_attribute("newmessage", "0") #進到訊息箱就清掉提示
@msg = Msg.find(params[:id])
unless list_user_message?(@msg) #除非是收件或是寄件人
redirect_to msgs_path
end
@msg.update_attribute("unread", "false" ) #變為已讀
@newmsg = current_user.msgs.new #給回復用 *註二
rescue
redirect_to msgs_path
end
end
def new
@msg = current_user.msgs.new
end
def create
@msg = current_user.msgs.build(msg_params)
if validate_user == nil #如果收件人不是使用者 *註一
render :new
elsif @msg.save
received=user_newmsg.newmessage #提取新訊息欄位的數量
received+=1 #增加一
user_newmsg.update_attribute("newmessage", received) #更新提示新訊息數量
redirect_to msgs_path
end
end