代码之家  ›  专栏  ›  技术社区  ›  John

数据无法从rails存储在mongodb上

  •  1
  • John  · 技术社区  · 11 年前

    我在rubyonrails中创建了一个示例网页,它有两个文本框和一个按钮。当我在文本框中输入一些数据并单击按钮时,不会出现错误。但数据没有存储在数据库中。我犯了什么错误。

    login.html.erb文件:

    <%= 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 %>
    

    routes.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包含必需的字段名 用户名和密码。如果有任何错误,我可以处理。但它没有显示错误。

    2 回复  |  直到 11 年前
        1
  •  1
  •   user3414734    11 年前

    我曾经遇到过同样的问题。我不知道是怎么回事。但我只是更改了database.yml中的内容

    localhost:yourdb_development 
    

    进入

    127.0.0.1:ypurdb_development
    

    我让它发挥了作用。

        2
  •  1
  •   cefigueiredo    11 年前

    您将数据发送到方法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(秒): 您可以在登录方法中使用该方法的内容。。。但我不建议。。。它很难看,不符合铁路的惯例。

    我甚至建议你进行重构。。。因为访问SampleController来创建产品是没有意义的。。。持久化在名为Logz的对象中。。。

    最好的做法是使用相同的名称。。。LogzController、@logz,最后是您的模型logz。最好你的路线遵循相同的模式。。。

    另一件事是,最好将方法登录更改为方法调用“new”,因为您使用该方法来填充新的Logz。。。不登录。。。