J'ai une recherche maintenant partielle comme ceci:Rails: construire assoc est dans: objet tout en rendant une partie
<%= render(:partial => 'order', :object => Order.new %>
Comment puis-je construire quelques objet LineItem vide dans le Order.new comme dans: objet => Commander.new?
Notez que Order has_many: line_items. Et comme un commentateur mentionné, cela pourrait sembler à première vue enfreindre la conception MVC, mais j'ai oublié de mentionner que ce rendu est vraiment dans une aide link_to_function qui sert à insérer dynamiquement plus de champs de l'attribut élément de campagne.
L'aide réelle ressemble à ceci:
#orders_helper.rb
def add_line_item_link(name, form_scope)
link_to_function name, :class => "add_line_item_link" do |page|
line_item_html = render(:partial => 'line_item', :object => @order.line_items.new, :locals => {:f => form_scope})
page << %{
var time_index = new Date().getTime();
var line_item_html = #{line_item_html.to_json};
line_item_html = line_item_html.replace(/_\\d+/g, "_"+time_index);
line_item_html = line_item_html.replace(/\\[\\d+\\]/g, "\\["+time_index+"\\]");
$('line_items').insert({bottom: line_item_html});
}
end
end
@ order.line_items.new est ce que j'aime travailler sur:
premier: Je veux au lieu d'un seul Line_Item à construire dans la @order objet, je veux trois. deuxième: l'élément de campagne a un attribut nommé 'title', et chaque fois que nous recevons une commande, à peu près chaque fois que la commande contient exactement trois éléments, un éditeur de titres, un photographe de titre et un éditeur de vidéo .
, peut-être que je peux donc je pensais que si quelque chose comme:
#orders_controller.rb
@titles = %w(editor photographer video-editor)
#orders_helper.rb
...#same as above
:partial => 'line_items', :collection => lambda { @titles.each {|t| @order.line_items.build(:title => t) } return @order.line_items}
...
des suggestions? Merci
Merci Matt, ça a marché! C'est très propre par rapport à la façon dont je pensais que je pourrais même aborder le problème. –
Cette méthode pourrait être une doublure, pas DRY. De même, le mot-clé return et les récepteurs explicites sont inutiles. –
Pas besoin de faire un doublure et ne pas utiliser un mot-clé explicite lorsque vous essayez d'expliquer quelque chose et de le rendre clair. – MattMcKnight