我坚持使用按钮点击的持久数据。是否可以从其他页面获取不同控制器功能的参数。
def create
@login=Login.new
@login.name=params[:name]
@login.email=params[:email]
@login.password=params[:password]
@login.phone_number=params[:phone_number]
if @login.save
render :action => 'success'
else
puts (@login.errors.full_messages)
render :action => 'failure'
end
end
def operation
if params[:commit] == "Clicked"
puts ("Inside CLICKED")
redirect_to action: 'clicked'
else
redirect_to action: 'create'
end
end
<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>
当我运行此功能时,当我点击创建按钮时,它会直接从index.html.erb指示我 failure.html.erb ,而不会点击 create.html.erb 。另外,如何在点击按钮后将数据保存在create
方法中?
答案 0 :(得分:0)
您的operation
操作重定向到create
,而您的create
操作会导致失败或成功,您的创建操作永远不会执行默认操作(即渲染您的创建视图)。
大多数时候new
操作会呈现表单,而create
操作(应该是POST)实际上会创建(保存)数据。
现在执行的重定向永远不会成功,因为它不会接收任何数据,因此它始终无法创建用户,因此它将始终显示失败屏幕。
[更新]最简单(但仍然很脏)修复它:
如果您重定向到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
因此,如果它是POST
:尝试保存并检查错误。如果是GET,则只渲染create.html.erb
。
最好,干净的REST方式是从new
操作重定向到operation
操作,您的表单将POST到create
操作。这就是它应该如何。