我有一个模型消息,我有一个收件人列表,它保存为字符串。无论出于何种原因,除了收件人列表之外,我的所有参数都被保存,只有收件人列表被遗漏。我很困惑这可能是什么原因。
模型:
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">]
在这种情况下,导致收件人列表无法保存的问题可能是什么?
编辑:
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: 添加序列化后: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">]
是我想要的新输出。我们一起工作。谢谢两位。