2011-01-12 46 views
1

我看过: Rails: Pass parameters with render :action?,但我仍然有问题。Rails 3渲染=>新增参数

我的新网页的网址是:http://localhost:3000/submit?category_id=2。第一次提交表单没有任何问题,但如果创建失败并且控制器呈现新页面,则会出现无法找到没有ID的类别的错误,因为该参数未被传递。

这里的new.html.erb短版和新/创建控制器

def new 
    ... 
    @category = params[:category_id] 
    @title = "Submit a review" 
    end 

    def create 
    .... 
    if @review.save 
     flash[:success] = "New a Created" 
     redirect_to user_path(@user) 
    else 
     @title = "New Review" 
     render :action => 'new', :category_id => @category  
    end 
    end 

低于1号线是给我的错误。

<h1>Blah, blah, blah<%= "best #{Category.find(@category).name}" %></h1> 
<br /> 
<%= form_for(...) do |f| %> 
    <%= render 'shared/error_messages', :object => f.object %> 
    <tr> 
    <td> <%= select_tag(... %></td> 
    <td><%= collection_select(...) %><br /> %></td> 
    <td><%= f.text_field ... %></td> 
    </tr> 
</table> 
     <%= f.hidden_field :category_id, :value=>@category %> 
<div class="actions"> 
     <%= f.submit "Add" %> 
</div> 
<% end %> 

任何帮助表示赞赏。我一直在圈子里呆了几个小时。

回答

1

我认为你的'创建'方法的else子句将需要粗略地反映你的'新'方法,这意味着再次从你的params散列填充@category

所以首先确保您的隐藏字段已填充,然后在提交表单时检查params的内容。 category_id应该在那里,如果保存失败,您需要再次抓住它,就像在'新建'中那样。

+0

谢谢你,我将@category移到了else语句中,我可以看到@category变量在环境转储的创建控制器中不是零。 但是,该值仍然没有通过渲染,并且错误消息保持不变。任何其他想法? – John 2011-01-12 23:46:50