編集:私の質問を言い換えてください:
を@template_written
生成する があり@final_written.body
ます。したがって、 を作成するため@final_written
に、@final_written.body
は prefilled( 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」内)。
これをフォームに追加しました(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 パラメータを before_saveに読み込みます
簡単に言えば、コールバックにはパラメーターがありません。コールバックは、オブジェクトまたはレコード自体に対してアクションを実行すると想定されています。したがって、パラメーターとして必要なものはすべて、属性 (データベースに保存されます) またはインスタンス変数として保存する必要があります。@nathanvda
@マザリックが言うように:
パラメーターはコントローラーで使用できますが、モデルでは使用できません。モデルのメソッドにそれらを渡すことはできますが、params[:i] はモデルでは機能しません..
この問題を解決するにはどうすればよいですか?