Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 RubyonRails:如果帖子没有保存,我如何保持在同一页面上?_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.1 - Fatal编程技术网

Ruby on rails RubyonRails:如果帖子没有保存,我如何保持在同一页面上?

Ruby on rails RubyonRails:如果帖子没有保存,我如何保持在同一页面上?,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,如果文章没有保存,那么它会重定向到,但我需要留在页面上,带有文本输入字段,以便用户可以输入数据 后模型 def create @addpost = Post.new params[:data] if @addpost.save flash[:notice] = "Post has been saved successfully." redirect_to posts_path else flash[:notice] = "P

如果文章没有保存,那么它会重定向到,但我需要留在页面上,带有文本输入字段,以便用户可以输入数据

后模型

def create
    @addpost = Post.new params[:data]
    if @addpost.save
        flash[:notice] = "Post has been saved successfully."
        redirect_to posts_path
    else
        flash[:notice] = "Post can not be saved, please enter information."
    end
end
new.html.erb

def new
    @arr_select = { 1=>"One",2=>"Two" ,3=>"Three" }
    @categories_select = Category.all.collect {|c| [ c.category_name, c.id ] }
end
添加帖子
“posts',:action=>“create”do%>
:addtextsize%>
10,:class=>:addtextarea%>

:addtextsize%>

我该怎么办?

像这样的东西可以满足您的需要:

<h3>Add post</h3>

<%= form_tag :controller=>'posts', :action=>'create' do %>
    <%= label :q, :Title %>
    <%= text_field :data, :title, :class => :addtextsize %><br/>
    <%= label :q, :Content %>
    <%= text_area  :data, :content, :rows=>10 , :class => :addtextarea %><br/>
    <%= label :q, :Category %>
    <%= select :data, :category_id, @categories_select %><br/>
    <%= label :q, :Tags %>
    <%= text_field :data, :tags, :class => :addtextsize %><br/>
    <%= label :q, :Submit %>
    <%= submit_tag "Add Post" %>
<% end %>
更新:您更新了问题,因此我必须更新我的答案。渲染是执行此操作的正确方法。但是,看起来您在
新方法中加载了一些类别和一些其他内容集合。这些相同的实例变量应该可用于
create
方法。最干净的方法是将它们放入另一个方法中,并将该方法用作
之前的过滤器
应用于
创建
新建
。大概是这样的:

flash[:notice] = "Post can not be saved, please enter information."
render :new

然后,您的
new
方法几乎是空白的,在
create
方法中调用
render:new
应该可以工作。

flash。现在您正在寻找
render

before_filter :load_stuff, :only => [:create, :new]

def load_stuff
  @arr_select = { 1=>"One",2=>"Two" ,3=>"Three" }
  @categories_select = Category.all.collect {|c| [ c.category_name, c.id ] }
end
也代替

flash.now[:notice] = "Post can not be saved, please enter information."
render :new
你可以直接写

flash[:notice] = "Post has been saved successfully."
redirect_to posts_path

它也会做同样的事情。它只适用于
重定向到
但不适用于渲染

嘿,这个答案太晚了,但我想我会为任何遇到它的人添加它。对于您想要实现的目标,最简单的解决方案可能是将required:true添加到您想要填写的所有表单输入中。例如

redirect_to posts_path, :notice => "Post has been saved successfully."
通过这种方式,只有在这些字段填写正确的情况下,表单才会提交,否则,需要填写的字段上将弹出一条错误提示消息。弹出的默认flash消息也可以自定义样式,谷歌如何做到这一点


通过这种方式,您可以在create方法中删除else重定向,因为它永远不会到达该点,只需执行if save、flash success等操作。

不渲染,而是使用此方法,将\u重定向到new\u post\u路径,看起来还可以。使用render时,我出错了。Posts中的NoMethodError#create Showing/path/to/app/views/Posts/new.html.erb,其中第10行出现:当您没有预料到它时,您有一个nil对象!您可能期望数组的一个实例。错误发生在评估nil.mapOk时,重定向是错误的,因为您丢失了用户需要查看的错误列表,以确定新用户出了什么问题。所以而不是重定向以使错误消失。。。让我们实际修复错误。:)你能在new.html.erb的第10行提供代码吗?你能展示你的“新”吗?我认为可能是呈现了新的.html.erb模板,其中包含(可能)一个post变量或其他内容。如果是这种情况,您可能需要将addpost重命名为post。不过,如果没有看到你的“新”功能,很难说到底是什么问题。我已经更新了原来的帖子/问题。再看一遍,我的答案仍然是正确的。更新,希望让原因更清楚。不,我想保持在相同的帖子/新页面。使用render时,我出错了。Posts中的NoMethodError#create Showing/path/to/app/views/Posts/new.html.erb,其中第10行出现:当您没有预料到它时,您有一个nil对象!您可能期望数组的一个实例。计算nil.map时出错,我已更新了原始post/问题,请再次查看以了解。重定向将丢失包含所有错误的临时@post变量。看起来您的
new.html.erb
模板正在使用@post变量,该变量在控制器的
create
方法中不存在。将@addpost重命名为just@post,它应该可以工作。你从哪里得到@post变量的?new.html中未使用post变量。erb@guru抱歉,没有看到编辑。您正在使用
@categories\u select
,这在
create
方法中不可用
render
仅渲染tempalte,它不执行控制器操作,因此这两个实例方法都未设置。
redirect_to posts_path, :notice => "Post has been saved successfully."
f.text_field :title, required: true, class: "whateverclassyouwant"