我有一个模型消息,我有一个recip_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的说明尽管变量名称存在差异,但我还是开始研究它为什么会起作用。 在弄乱它的时候,我意识到如果我收件人的话,它实际上只是那样工作 - &gt;收件人或反之,它将停止工作。
摆弄它,并根据纳什的建议提出以下建议:
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">]
所以现在正在保存recipient_list,我只需要弄清楚如何删除所有不必要的乱码并获得“&#39; 1&#39;大声笑。还有其他建议吗?
编辑#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">]
是新的输出,这是我想要的。我们在这一个上一起工作。谢谢你们两位。
答案 0 :(得分:1)
看起来你应该在你的覆盖编写器中调用super
方法:
def recipient_list=(recipients) #jquery-token-input
self.recipient_ids = recipients.split(",")
super(recipients)
end
或类似的东西取决于你的代码。
答案 1 :(得分:1)
我相信你的写作方法中有拼写错误。您正在传递名为recipient
的参数,但请调用recipients.split(",")
。改变任何一个,你应该设置。