0

我做了什么:

  1. 创建一个新的 ruby​​ 应用程序rails new campaigns_manager
  2. 移动到活动管理器目录,生成第一个脚手架活动 rails generate scaffold campaign name:string并迁移
  3. 添加根路由root to: 'campaigns#index', as: 'campaigns'

这么几串代码。然后我启动服务器来测试它。一切看起来和工作正常,但是当我尝试添加新的广告系列时,没有任何保存。按下“创建广告系列”按钮后,我在控制台中收到类似的信息:

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

为什么我不能将我的广告系列保存到数据库?

4

2 回答 2

1

问题出在routes.rb文件中。

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

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

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

resources :campaigns
root to: 'campaigns#index'

更多关于Rails 指南中的路线

于 2012-04-25T20:13:30.473 回答
0

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

<%= form_for @campaign do |f| %> 
于 2012-04-25T20:10:50.143 回答