我做了什么:
rails new campaigns_manager
rails generate scaffold campaign name:string
并迁移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 %>
为什么我无法将广告系列保存到数据库?
答案 0 :(得分:1)
问题出在routes.rb
文件中。
root to: 'campaigns#index', as: 'campaigns'
别名as: 'campaigns'
尝试使用所有请求。无需为root指令添加别名,默认情况下它已经有一个:as: 'root'
您的routes.rb
文件必须如下所示:
resources :campaigns
root to: 'campaigns#index'
中路线的更多信息
答案 1 :(得分:0)
在campaigns/new
中查看视图代码会有所帮助,但很明显,/
的帖子可以从日志中看到,index
正在处理行动(根据您的路线应该如此)。您必须确保campaigns/new
中的表单发布到/campaigns
(在Rails RESTful路由中解析为create
操作)。如果您正在使用form_for
(我认为这是脚手架生成的内容),它应该看起来像这样:
<%= form_for @campaign do |f| %>