Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 混乱,验证失败后未呈现新操作_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 混乱,验证失败后未呈现新操作

Ruby on rails 混乱,验证失败后未呈现新操作,ruby-on-rails,ruby,Ruby On Rails,Ruby,因此,我有以下代码: def new @all_areas = Area.all @area = Area.new end <% if @all_areas %> <%= f.label :parent_area %> <%= f.collection_select(:parent_area, @all_areas, :_id, :name, prompt: "Select a Parent...") %>

因此,我有以下代码:

def new 
    @all_areas = Area.all
    @area = Area.new
end
 <% if @all_areas %>
        <%= f.label :parent_area %>
        <%= f.collection_select(:parent_area, @all_areas, :_id, :name, prompt: "Select a Parent...") %>
    <% end %>
我之所以传入所有_区域,是因为表单中需要一个下拉框,使用mongoid,一个区域可以递归地嵌入到另一个区域中

我的表单具有以下代码:

def new 
    @all_areas = Area.all
    @area = Area.new
end
 <% if @all_areas %>
        <%= f.label :parent_area %>
        <%= f.collection_select(:parent_area, @all_areas, :_id, :name, prompt: "Select a Parent...") %>
    <% end %>
为什么第二次未将@all_区域传递给视图?实际上,我已通过将create操作中的代码更改为以下内容来修复它:

else
     render 'new'
else
    @all_areas = Area.all
    render 'new'

但这很令人惊讶,除非我遗漏了什么

这不是一个bug。该行为的原因是
create
操作实际上与
new
操作非常独立,因此您在
new
中指定的实例变量不会结转
render'new'
只渲染名为“new”的视图,它实际上不调用
new
操作

new
发生在您向
/areas/new
发出
GET
请求时<代码>创建发生在
发布到
/区域
时。因为它们是独立的请求,服务器不记得任何状态——事实上,您可以调用
create
,而不必调用
new
(比如,如果您在命令行中使用curl)

基本上,您的方法是正确的,您需要在两个操作中设置
@all_area
实例变量。您可能希望将其提取到单独的私有方法中,以避免重复