【发布时间】:2015-07-07 07:11:33
【问题描述】:
编辑:改写我的问题:
我有一个@template_written,我从中生成@final_written.body。因此,要创建@final_written,@final_written.body 是预填充的(final_written belongs_to template_written)。
从@final_written.body 生成数组@names (attr_accessor :names),其中包含@@ 包围的文本。
@names = ["Lorem ipsum", "aliquip ex ea", "cillum dolore", "est laborum"]
我的目标是将@final_written.body 中出现的数组替换为表单(在“新”视图中)。
我在一个表单中添加了这个(在 new.html.erb 中):
<%= @names.each do |k| %>
<%= label_tag k %> <br>
<%= text_field_tag k %> <br>
<% end %>
发送这个:
Parameters:
{
"utf8"=>"✓",
"authenticity_token"=>"iw3ZCksupersecretU4sVyi5D",
"final_written"=>{
"title"=>"Ted",
"body"=>"@@Lorem ipsum@@ dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut @@aliquip ex ea@@ commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse @@cillum dolore@@ eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id @@est laborum@@."
},
"Lorem ipsum"=>"bla",
"aliquip ex ea"=>"bla",
"cillum dolore"=>"bla",
"est laborum"=>"bla",
"commit"=>"Create final_written",
"template_written_id"=>"1"
}
我尝试了(以及其他数千种东西),但没有用(comment.rb):
before_save :change
protected
def change
kwords = self.body.scan(/@@(.+?)@@/).flatten
kwords = kwords.uniq
cuerpo = self.body
kwords.each do |i|
i = params[:i]
cuerpo.gsub(/@@#{i}@@/, i)
end
self.body = cuerpo
end
如何从提交的数据中收集我需要的数据?和
保存前如何使用它修改@final_written.body?
非常感谢各位!我需要了解它是如何工作的!
编辑
我在Send parameter to before_save读到
简短的回答:回调永远不会有参数。假设回调对对象或记录本身采取行动。因此,您需要作为参数的任何内容都需要存储为属性(保存到数据库中)或实例变量。 @nathanvda
正如@Mattherick 所说:
参数在控制器中可用,但在模型中不可用。你 可以将它们传递给模型中的方法,但 params[:i] 不会 在模型中工作..
如何解决这个问题?
【问题讨论】:
-
您到底想实现什么? :-) 我真的不明白你的问题,对不起。但到目前为止我可以看到的是你在你的模型中使用 params[:i] 做了一些事情..这不起作用..参数在控制器中可用,但在模型中不可用。您可以将它们传递给模型中的方法,但 params[:i] 在模型中不起作用..
-
@Mattherick 我需要键“Lorem ipsum”、“aliquip ex ea”、“cillum dolore”和“est labourum”的值,这些对没有活动记录数据,我需要它执行 before_save 类。
-
你为什么使用
before_save?正如您所说,您不是在处理AR对象。难道你不能简单地使用一个从你的控制器接受参数的方法来做你的事情并将修改后的文本返回给控制器吗? -
@MurifoX 好吧,我不知道是怎么做到的……有什么线索吗?
标签: ruby-on-rails arrays forms params before-save