J'ai un objet modèle Post
qui fait référence à un objet parent. Les méthodes edit
, new
et reply
utilisent toutes le même modèle partiel.Rails: Comment envoyer un objet avec un formulaire?
Les posts_controller
méthodes:
def edit
@post = Post.find(params[:id])
end
def reply
@post = Post.new
@replypost = Post.find(params[:id])
@post.title = @replypost.title
@post.parent = @replypost
end
Le code de modèle partiel:
<% form_for(@post) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :title %><br />
<%= f.text_field :title %>
</p>
<p>
<%= f.label :body %><br />
<%= f.text_area :body %>
</p>
<%= if :parent then f.hidden_field :parent end %>
<p>
<%= f.submit "Create" %>
</p>
<% end %>
Si je regarde le code source HTML généré par le modèle partiel, je peux voir que je passe une sorte de l'objet id à ma méthode create.
<input id="post_parent" name="post[parent]" type="hidden" value="#<Post:0x103e3bdf0>" />
Le problème est que quand je tente de sauver ce nouvel objet, je l'ai créé, je reçois un avertissement qu'il attendait un poste et obtenu une chaîne. Je suis sûr que je peux contourner ce problème en définissant et en obtenant le parent_id et en le passant avec mon formulaire, mais je me demande s'il n'y a pas une meilleure façon de le faire, quelque chose de plus élégant et Rails-esque.
parfait. Merci! – kubi
En gardant à l'esprit que l'utilisation de l'option UNLESS (ou IF dans votre question) aura pour résultat que le champ caché n'est pas créé du tout, donc params [: post] [: parent_id] pourrait être null –