Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 RoR:在单击按钮时保存数据_Ruby On Rails - Fatal编程技术网

Ruby on rails RoR:在单击按钮时保存数据

Ruby on rails RoR:在单击按钮时保存数据,ruby-on-rails,Ruby On Rails,我被按钮点击时的持久数据所困扰。是否可以从另一页获取不同控制器功能的参数 控制器 查看create.html.erb index.html.erb 当我运行它时,当我单击create按钮时,它会直接从index.html.erb指向failure.html.erb,而不会点击create.html.erb。另外,如何在单击按钮后保留创建方法中的数据?您的操作操作将重定向到创建,并且您的创建操作将呈现失败或成功,您的创建操作从不执行默认操作,即呈现您的创建视图 大多数情况下,新操作会呈现表单,而应

我被按钮点击时的持久数据所困扰。是否可以从另一页获取不同控制器功能的参数

控制器 查看create.html.erb index.html.erb 当我运行它时,当我单击create按钮时,它会直接从index.html.erb指向failure.html.erb,而不会点击create.html.erb。另外,如何在单击按钮后保留创建方法中的数据?

您的操作操作将重定向到创建,并且您的创建操作将呈现失败或成功,您的创建操作从不执行默认操作,即呈现您的创建视图

大多数情况下,新操作会呈现表单,而应该是POST的create操作会实际创建并保存数据

现在重定向到create将永远不会成功,因为它不会接收任何数据,因此创建用户将始终失败,因此它将始终显示失败屏幕

[更新]最简单但仍然肮脏的修复方法:

如果重定向到创建操作,则它是GET请求,而不是POST

因此,最简单的解决方法是:

def create
  if request.post?
    @login = Login.new(params)

    if @login.save
      render :action => 'success'
    else
      puts (@login.errors.full_messages)
      render :action => 'failure'
    end
  else
    @login = Login.new
  end
end
因此,如果它是一篇文章:尝试保存并检查错误。如果是GET,只需渲染create.html.erb


最好的、干净的REST方式是从操作操作重定向到新操作,表单将发布到创建操作。应该是这样的。

您的视图页面中有success.html.erb视图页面吗?是的。我有。当我删除所有验证时。我得到了成功页面。但是为什么我没有看到create.html页面?但是我想当我转到索引页面并单击create按钮时。它将转到create action并呈现create.html.erb,然后当我点击submit按钮时,create action本身会保存数据并检查错误。如果我想保持现在的设计不变,我应该做什么改变来实现这一点?可能吗?谢谢你的编辑和工作为我,但是的,我会改变设计,并添加新的行动在控制器。
 <h1>Welcome to DemoSite.com</h1>
 <p></p>

 <%= form_for (@login), :url => {:action => "create"} do |f| %>
 <p>
   <%= f.label :Name %><br>
   <%= f.text_field :name %>
 </p>

 <p>
  <%= f.label :Email %><br>
  <%= f.text_field :email %>
 </p>

 <p>
  <%= f.label :Phone_Number %><br>
  <%= f.telephone_field :phone_number %>
 </p>

 <p>
  <%= f.label :Password %><br>
  <%= f.password_field :password %>
 </p>

 <p>
  <%= f.label :password_confirmation %><br>
  <%= f.password_field :password_confirmation %>
 </p>

 <p>
  <%= f.submit('Submit') %>
 </p> 
<% end %>
<h1>Welcome to DemoSite.com</h1>
<p></p>

<%= form_tag "/logins/operation", :method => "post"  do %>
<p>
  <%= label_tag(:username, "Username") %><br>
  <%= text_field_tag(:username) %>
</p>
<p>
  <%= label_tag(:password, "Password") %><br>
  <%= password_field_tag(:password) %>
</p>

<p>
 <%=submit_tag "Create" %> 
 <%= submit_tag "Clicked" %> 
</p>
def create
  if request.post?
    @login = Login.new(params)

    if @login.save
      render :action => 'success'
    else
      puts (@login.errors.full_messages)
      render :action => 'failure'
    end
  else
    @login = Login.new
  end
end