私はモデル Messages を持っています。これには、文字列として保存する recipient_list があります。保存時になんらかの理由で、recipient_list 以外のすべてのパラメーターが保存され、recipient_list だけが除外されます。これは何が原因なのだろうと頭を悩ませています。
モデル:
class Message < ActiveRecord::Base
attr_accessible :content, :sender_id, :recipient_list
attr_reader :recipient_list #necessary for jquery-token-input
belongs_to :sender, class_name: "User"
validates :content, presence: true
validates :sender_id, presence: true
validates :recipient_list, presence: true
def recipient_list=(recipient) #jquery-token-input
self.recipient_ids = recipients.split(",")
end
end
コントローラ:
def create
@message = current_user.sent_messages.build(params[:message])
if @message.save
flash[:success] = "Message Sent."
redirect_to '/users/'+current_user.id.to_s+'/messages'
else
redirect_to '/users/'+current_user.id.to_s+'/messages'
end
end
パラメーター:
{"utf8"=>"✓",
"authenticity_token"=>"WlStV4ogguSX72vrZp10zJbucS5MTL1pT1DLt06qjcw=",
"message"=>{"recipient_list"=>"1,2",
"content"=>"foobar123",
"sender_id"=>"1"},
"commit"=>"Send"}
結果:
#<Message id: 32, content: "foobar123", sender_id: 1, recipient_list: "", created_at: "2012-08-22 19:38:44", updated_at: "2012-08-22 19:38:44">]
この場合、recipient_list が保存されない原因は何でしょうか?
編集:
Par Ylan のメモ変数名の違いにもかかわらず、なぜそれが機能しているのかを調べてみました。それをいじってみると、実際には、受信者を作成した場合にのみそのように機能していることに気付きました->受信者、またはその逆の場合、機能しなくなります。
それをいじって、ナッシュの提案に基づいて、次のことを思いつきました:
def recipient_list=(ids)
recipient_list = ids.split(",")
super(recipient_list)
end
#<Message id: 42, content: "foobar123", sender_id: 1, recipient_list: "---\n- '1'\n", created_at: "2012-08-22 21:58:46", updated_at: "2012-08-22 21:58:46">]
これで、受信者リストが保存されました。不要な文字化けをすべて削除して「1」だけを取得する方法を見つけなければなりません笑。さらに提案はありますか?
編集 #2: serialize :recipient_list, Array を追加した後
#<Message id: 43, content: "foobar123", sender_id: 1, recipient_list: ["1", "2"], created_at: "2012-08-22 22:10:46", updated_at: "2012-08-22 22:10:46">]
私が目指していた新しいアウトプットです。私たちはこれに協力しました。ありがとうございます。