我是Ruby on Rails的新手,这是我关于SO的第一个问题,我希望有人能够帮助我。
我有一个控制器主要,其中包含主页,在此视图中,我有一个表单来创建一个模型邮件的新条目。我的问题是我的数据库中的条目是空的(我用rails c,Mail.all检查),所有字段都设置为nil(除了通常的id之外)。我可以通过使用具有相同名称的模型和控制器来简化我的生活,但我非常确定RoR应该能够处理这个问题。
模型邮件:
class Mail < ActiveRecord::Base
end
对应的 schema.rb :
ActiveRecord::Schema.define(version: 20140217160636) do
create_table "mails", force: true do |t|
t.string "address"
t.string "type"
t.boolean "confirmed"
t.datetime "created_at"
t.datetime "updated_at"
end
end
控制器主要:
class MainController < ApplicationController
def home
@mail = Mail.new
end
def create
@mail = Mail.new(params[:main])
if @mail.save
redirect_to :root
end
end
end
在视图主页中显示的 _form.html.erb 表单通过&lt;%= render'main / form'%&gt;在application.html.erb中:
<%= form_for @mail do |f| %>
<%= f.text_field :address %>
<%= f.select :type, [['Early adopter','early_adopter'],['Investisseur','investisor'],['Journaliste','journalist']] %>
<%= f.hidden_field :confirmed, :value => false %>
<%= f.submit("S'inscrire") %>
<% end %>
<%= debug(params) if Rails.env.development? %>
调试行始终显示:
--- !ruby/hash:ActionController::Parameters
controller: main
action: home
这对我没什么帮助。
最后 routes.rb :
LandingPage::Application.routes.draw do
root 'main#home'
resources :mails, controller: :main, :path => "/"
end
总结一下:一切几乎都像魅力:表单是可见的和功能性的,post方法根据需要重新路由到根,在DB中创建一个邮件条目。我唯一的问题是路由信息似乎在路由中丢失,而且DB条目是空的。
如果有帮助,这是我的安装信息。
的Gemfile :
source 'https://rubygems.org'
gem 'rails', '4.0.2'
gem 'sqlite3'
gem 'sass-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 1.2'
group :doc do
gem 'sdoc', require: false
end
gem 'i18n', '~> 0.6.9'
由于我是RoR的新手,我希望有人会注意到我缺少的东西并解释它,以便我可以进一步开展我的RoR教育。很抱歉,如果您对Main / Mail感到困惑,我将来会尝试更好地区分我的名字。
修改: 我将邮件的每个实例更改为 mail_info ,将邮件更改为 mail_infos ,并成功完成 db:migrate 即可。我有同样的问题,我的 mail_infos 条目为空(无字段)。所以这不是名字。
答案 0 :(得分:0)
你试过strong parameters吗? Rails不允许将Model
的所有值保存在DB中。它将允许安全漏洞。因此,您应该在RoR 4之前使用名为strong parameters
的{{1}}。
attr_accessible
答案 1 :(得分:0)
不要对列使用“type”名称,因为它用于单表继承。