現在、handlebars.jsテンプレートを使用しているシステムで作業しています。しかし、ほとんどの場合、実際には存在しない属性を渡しているという問題があります。Rails Jsonにはカスタム値が含まれています
元はモデルが文字列をメソッドに渡すように設定していました。別の同僚は、関数が単に固定文字列リテラルを返すだけで、本当にロジックを実行していないので、悪い臭いがあると指摘しました(私はレールが初めてです)。しかし、私は他の方法でそれを行う方法を理解できませんでした。
最終的には、それが本質的にネストされた属性につながったビューを通じて、それをjsonに追加することができました。
問題は、文字列がデータにネストされていないため、ページに別のフォームテンプレートを追加しようとすると、この方法でハンドルバーを実行できなくなることです。私はデータにそれを入れ子にすることができますが、テンプレートは2つの場所で使用されているので、テンプレートの複製を作成する必要があります。私はまた、JavaScriptを複製する必要があります。
私の質問は、「レールの方法」に沿って、物事を単純化して固定された文字列を渡すだけでモデルに戻ってしまうのはいかがですか?これは洗練されたソリューションではありませんが、コードワイズの方が簡単です。
<% fields_for :thing do |f| %>
<fieldset>
<div>
<div>
<input type="hidden" id="special_report_{{../type}}_attributes_{{sequence}}_id" name="special_report[{{../type}}_attributes][{{sequence}}][id]" value="{{id}}"/>
<input type="hidden" id="special_report_{{../type}}_attributes_{{sequence}}__destroy" name="special_report[{{../type}}_attributes][{{sequence}}][_destroy]" class="remove_flag" value="{{id}}"/>
<%= remove_child_link "remove", f %>
</div>
<p>
<span>Title: </span><br/>
<input type="text" id="special_report_{{../type}}_attributes_{{sequence}}_title" name="special_report[{{../type}}_attributes][{{sequence}}][title]" size="30" value="{{title}}"/>
</p>
<p>
<span>Date: </span><br />
<input id="special_report_{{../type}}_attributes_{{sequence}}_event_date" name="special_report[{{../type}}_attributes][{{sequence}}][event_date]" size="30" type="text" value="{{event_date}}"/>
</p>
<p>
<br />
<div>
<textarea id="special_report_{{../type}}_attributes_{{sequence}}_content" name="special_report[{{../type}}_attributes][{{sequence}}][content]">{{content}}</textarea>
</div>
</p>
</div>
</fieldset>
<% end %>
{{ 'sはハンドル変数を示します
はここにいくつかのサンプルコードです。 は、ここでビューのコード
<script>
var updates_data = {update_content: $j.parseJSON('<%= @update_json %>'),"type":"updates"}
var highlights_data = { highlight_content: $j.parseJSON('<%= @highlight_json %>'),"type":"highlights"}
</script>
<% form_for(@foo) do |f| %>
<div>
<div>
<b>Updates:</b>
<p>
<%= add_child_link "Add update", :updates %> #custom wrapper for a link to the template
</p>
<div>
<script id="updates-template" type="text/x-handlebars-template">
{{#each update_content}}
<%= new_child_fields_template(f, :updates)%>
{{/each}}
</script>
<script id="update-template" type="text/x-handlebars-template">
<%= new_child_fields_template(f, :updates)%>
</script>
</div>
</div>
<div>
<b>Highlights:</b>
<p><%= add_child_link "Add highlight", :highlights %></p>
<div id="highlights">
<script id="highlights-template" type="text/x-handlebars-template">
{{#each highlight_content}}
<%= new_child_fields_template(f, :highlights)%>
{{/each}}
</script>
</div>
</div>
</div>
<% end %>
モデル内のメソッドは、我々は二つのモデルのアップデートやハイライトから引っ張っていると、彼らの両方が同じフォームテンプレートを使用するだけで
def type
"update"
end
たです。
これらの技術はどちらも私には新しく、どの方法が最適かわからないので、私は尋ねています。前もって感謝します。
編集またはTLDR
基本的に私は聞いてるのよ、それはビューに何かをプッシュする方がよいか、などの方法持っている:
def type
"update"
end
このような悪い状況を?
申し訳ありませんが、私はその質問を理解していません。 Apparntly、私は唯一ではない。あなたはもっと真直ぐでなければなりません。 – apneadiving
ええ、本当に長いことをお詫び申し上げます。私はおそらくそれをもっとよくまとめたかもしれません。 – Micharch54