创建的对象不保存在数据库中

时间:2012-04-25 19:56:41

标签: ruby activerecord

我做了什么:

  1. 创建一个新的ruby应用rails new campaigns_manager
  2. 转到 campaign_manager 目录,生成第一个支架广告系列 rails generate scaffold campaign name:string并迁移
  3. 添加根路由root to: 'campaigns#index', as: 'campaigns'
  4. 这么几串代码。然后我启动服务器来测试它。一切看起来都很好,但是当我尝试添加一个新的广告系列时,没有什么可以节省。按“创建广告系列”按钮后,我在控制台中收到类似的内容:

    Started POST "/" for 127.0.0.1 at 2012-04-25 22:30:40 +0300
    Processing by CampaignsController#index as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"sKom3YBDEbOcqbSt3gLGWPqBNeqkEw6M59hlwrmH4tM=", "campaign"=>{"name"=>"test"}, "commit"=>"Create Campaign"}
      Campaign Load (0.3ms)  SELECT "campaigns".* FROM "campaigns" 
      Rendered campaigns/index.html.erb within layouts/application (0.9ms)
    Completed 200 OK in 37ms (Views: 35.4ms | ActiveRecord: 0.3ms)
    

    然后我重定向到广告系列列表,没有新的广告系列。 db \ development.sqlite3 中的表广告系列为空 此外,我将打印方法添加到广告系列控制器,以检查我是否调用了正确的方法。我看到,当我按下“创建广告系列”按钮时,不会调用创建方法 我的广告系列/新视图:

    <h1>New campaign</h1>
    
    <%= form_for(@campaign) do |f| %>
    
      <div class="field">
        <%= f.label :name %><br />
        <%= f.text_field :name %>
      </div>
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
    
    <%= link_to 'Back', campaigns_path %>
    

    为什么我无法将广告系列保存到数据库?

2 个答案:

答案 0 :(得分:1)

问题出在routes.rb文件中。

root to: 'campaigns#index', as: 'campaigns'

别名as: 'campaigns'尝试使用所有请求。无需为root指令添加别名,默认情况下它已经有一个:as: 'root'

您的routes.rb文件必须如下所示:

resources :campaigns
root to: 'campaigns#index'

有关Rails Guides

中路线的更多信息

答案 1 :(得分:0)

campaigns/new中查看视图代码会有所帮助,但很明显,/的帖子可以从日志中看到,index正在处理行动(根据您的路线应该如此)。您必须确保campaigns/new中的表单发布到/campaigns(在Rails RESTful路由中解析为create操作)。如果您正在使用form_for(我认为这是脚手架生成的内容),它应该看起来像这样:

<%= form_for @campaign do |f| %>