Rails4:从不同的控制器保存模型(带有表单和POST)

时间:2014-02-18 10:23:41

标签: ruby-on-rails forms post model controller

我是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 条目为空(无字段)。所以这不是名字。

2 个答案:

答案 0 :(得分:0)

你试过strong parameters吗? Rails不允许将Model的所有值保存在DB中。它将允许安全漏洞。因此,您应该在RoR 4之前使用名为strong parameters的{​​{1}}。

attr_accessible

答案 1 :(得分:0)

不要对列使用“type”名称,因为它用于单表继承。