参数保存不正确(Rails)

时间:2012-08-22 20:00:28

标签: ruby-on-rails ruby parameters save

我有一个模型消息,我有一个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">] 

是新的输出,这是我想要的。我们在这一个上一起工作。谢谢你们两位。

2 个答案:

答案 0 :(得分:1)

看起来你应该在你的覆盖编写器中调用super方法:

def recipient_list=(recipients) #jquery-token-input
  self.recipient_ids = recipients.split(",")
  super(recipients)
end 

或类似的东西取决于你的代码。

答案 1 :(得分:1)

我相信你的写作方法中有拼写错误。您正在传递名为recipient的参数,但请调用recipients.split(",")。改变任何一个,你应该设置。