我在rubyonrails中创建了一个示例网页,其中有两个文本框和一个按钮。当我在文本框中输入一些数据并单击按钮时,没有出现错误。但是数据不存储在数据库中。我犯了什么错误?
login.html。动词文件:
<%= form_for @product, url:{action: "login"} do |f| %>
<% if @product.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>
<ul>
<% @product.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :username %><br>
<%= f.text_field :username %>
</div>
<div class="field">
<%= f.label :password %><br>
<%= f.text_field :password %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
路线。rb文件:
Sample::Application.routes.draw do
get "sample/login"
root 'sample#login'
post 'sample/:id' => 'sample#login'
end
示例控制器文件:
class SampleController < ApplicationController
def login
@product=Logz.new
end
end
和模型类名Logz包含必要的字段名用户名和密码。如果有任何错误,我可以处理。但是它没有显示错误
我曾经遇到过同样的问题。我不知道这是怎么回事。但我只是改变了数据库中的内容。yml
localhost:yourdb_development
到
127.0.0.1:ypurdb_development
,我让它工作。
您正在将数据发送给方法login,但它只是实例化了一个新的Product,并且它没有接收任何属性…即使收到……它根本不保存产品,因此不持久化数据。
尝试添加一个方法create…它将负责接收数据并保存
class SampleController < ApplicationController
def create
@product = Logz.new(params[:product])
if @product.save
format.html { redirect_to 'sample#login', notice: 'Data saved successfully' }
else
flash[:notice] = 'A wild error appeared'
end
end
之后,创建到post 'sample/create'
的路由,并将动作更改为表单发送数据的位置…form_for @product, action: "create", method: 'post'
做……我将有可能在您的数据库中持久化数据…
PS:你可以在你的login方法中使用那个方法的内容…但我不建议……它很丑,而且不遵循rails的约定。
我甚至建议你做一个refactory…因为访问一个SampleController来创建一个Product是没有意义的…
最好的做法是所有人都遵循相同的名称…LogzController, @logz,最后是模型Logz。最好你的路线遵循相同的模式…
另一件事是,这将是很好的改变你的方法login为一个方法调用'new',因为那个方法你使用填充一个新的Logz…不登录…