2012-07-01 103 views
0

我有两个控制器杂志和文章,文章是杂志的嵌套路线。当我在/magazines/show我有一个基本的形式。当此提交它被送往文章控制器创建一个文章AJAX渲染搞乱了我的路线

<%= form_for @article, :url => magazine_articles_path(@magazine), remote: true do |f| %> 
    <%= render 'shared/error_messages', target: @article %> 
    <%= f.text_field :name %> 
    <%= f.submit %> 
<% end %> 

。在文章控制器I渲染重新渲染这种形式的行动(我重新描绘的形式摆脱错误的,如果有的话)

$('#id').html('<%= escape_javascript render partial: 'create_article' %>'); 

然而,这改变了形式的行动/magazines/:id/articles,而不是/magazines/:id

初始形态:

重新描绘后
<form id="new_article" class="new_article" method="post" data-remote="true" action="/magazines/1/articles" accept-charset="UTF-8"> 

形式:

<form id="edit_article_3" class="edit_article" method="post" data-remote="true" action="/magazines/1/articles" accept-charset="UTF-8"> 

这打乱了我的路由和给我的路由错误,如果我尝试再次提交此表。我猜这是发生,因为新的@article来自物品管理员。有关这种情况的更多细节以及干净利索的解决方案将非常感谢。谢谢一堆!

+0

在两种情况下呈现相同的形式? – nathanvda

+0

@nathanvda是相同的代码(相同的部分)正在呈现,但轨道正在改变生成的HTML,我编辑我的问题,包括这个 – Steve

回答

1

哈!在第二种情况下,你@article已经存在,并且您的形式应该如下所示:

<%= form_for @article, :url => magazine_articles_path(@magazine, @article), remote: true do |f| %> 

所以要更多解释:由于@article存在,你应该清楚这@article正在编辑。如果文章还不存在,只需要创建新文章。

这是可能的路径助手可以处理新的记录与exisiting记录本身,否则,你将不得不做一些像

<% post_url = @article.new_record? ? magazine_articles_path(@magazine) : magazine_articles_path(@magazine, @article) %> 
<%= form_for @article, :url => post_url, remote: true do |f| %> 

希望这有助于。