Rails 4不会将数据保存到数据库

时间:2014-06-17 08:06:38

标签: ruby-on-rails forms ruby-on-rails-4

我正在使用Rails 4,并尝试通过表单保存数据,但该过程不断失败。我已经尽力去看其他有类似问题的人,但即使复制他们的代码也不适合我。填写表单后的最终结果是收到错误,说明未保存联系人。有任何想法吗?谢谢!

controllers / contacts_controller.rb

class ContactsController < ApplicationController

  def create
    @contact = Contact.new(contact_params)
    if @contact.save
      flash[:success] = "Contact saved!"
    else
      flash[:alert] = "Contact not saved!"
    end
  end

  def destroy
  end

  def new
    @contact = Contact.new
  end

  private

    def contact_params
      params.require(:contact).permit(:first_name, :last_name, :email)
    end
end

视图/联系人/ new.html.erb

<div class= "panel-body">
  <%= form_for(@contact) do |f| %>

  <div class="form-group">
    <%= f.label :first_name %>
    <%= f.text_field :first_name, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :last_name %>
    <%= f.text_field :last_name, autofocus: true, class: "form-control" %>
  </div>        

  <div class="form-group">
    <%= f.label :email %>
    <%= f.email_field :email, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.submit "Add", class: "btn btn-primary" %>
  </div>

  <% end %>
</div>

配置/ routes.rb中

Rails.application.routes.draw do

  resources :contacts, only: [:new, :create, :destroy]

end

模型/ contact.rb

class Contact < ActiveRecord::Base

    validates :first_name, presence: true
    validates :last_name, presence: true
    validates :email, presence: true    

end

分贝/迁移

class CreateContacts < ActiveRecord::Migration
  def change
    create_table :contacts do |t|
      t.string :first_name
      t.string :last_name
      t.string :email

      t.timestamps
    end
  end
end

3 个答案:

答案 0 :(得分:0)

  

由于您收到了警报消息,我认为会有一些消息   验证失败。

我的想法 - 当您致电.save时出现问题可能有多种原因:

  
      
  • 验证错误
  •   
  • 您的数据库可能不完整(需要运行rake db:migrate
  •   
  • 您的数据结构可能存在问题
  •   

我会这样做:

  1. Contact型号
  2. 中删除所有验证
  3. 确保执行rake db:migrate(迁移数据表)
  4. 确保从params传递到view
  5. 时填充了controller哈希值

    -

    <强>错误

    当你提到没有错误时,除非你真正在你的网站上显示它们,否则不会有:

    引用this answer,您可能希望这样做:

    <%= form_for @contact do |f| %>
        <% if @location.errors.any? %>
        <ul>
          <% @location.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
          <% end %>
        </ul>
        <% end %>
    <% end %>
    

答案 1 :(得分:0)

嗨,我刚遇到这个问题。

阅读此主题中提供的链接,并查看有关布局和部分文件的其他几个屏幕。

结论:

  • 通过部分呈现表单不是原因 你只需要确保在控制器类中实例化实例变量(在&#39; new&#39; action)
  • 我的原因我正在包装 的form_for 在一个&#34;&#34;标签因此导致带有提交按钮的乱七八糟提交按钮会将表单提交到&#34中指定的URL;动作&#34;表格的属性)并由于此包装我的表单没有行动属性。

所以当我点击提交按钮时,它只是重新加载/刷新页面。

对于遇到此事的其他人,您必须检查生成的表单标记。

P.S:像我一样,Rails中的新手必须阅读信息链接, 结果我们也可以将变量发送到部分而不仅限于:provide&amp;屈服方法。

答案 2 :(得分:-2)

找出解决方案(虽然不确定为什么它打破了它)。我意识到我的表单实际上是部分呈现的,而我在部分中的猜测形式无法成功传递params。一旦我从部分删除表格,一切都提交正常。

感谢所有的建议,请原谅新手的错误:)