【发布时间】:2014-02-18 10:23:41
【问题描述】:
我是 Ruby on Rails 的新手,这是我关于 SO 的第一个问题,希望有人能够帮助我。
我有一个控制器 Main 和一个视图 home,在这个视图中我有一个表单来创建一个带有模型 Mail 的新条目.我的问题是我的数据库中的条目是空的(我用 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 的表单通过 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 方法根据需要重新路由到根目录,在数据库中创建一个邮件条目。我唯一的问题是帖子信息似乎在路由中丢失了,并且数据库条目是空的。
如果有帮助,这里是我的安装信息。
宝石文件:
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 的每个实例更改为 mail_info,将 mails 更改为 mail_infos 并成功执行了 db:migrate 。我有同样的问题,我的 mail_infos 条目是空的(无字段)。所以这与名字无关。
【问题讨论】:
-
我不认为你可以创建一个名为 Mail 的类,这已经是一个内置 rails 模块的名称。要对此进行测试,请转到控制台并输入“Mail.new”,查看创建的对象类型
-
@Slicedpan 在这种情况下,OP 应该有错误吧?
-
是的,可能包含邮件类定义的文件没有被加载。我无法使用 rails 4 在控制台中创建一个名为 Mail 的类,我得到“邮件不是一个类”,因为它已经被定义为一个模块
-
其实我只是尝试用上面的类定义创建一个名为 mail.rb 的文件,rails 根本不会启动
标签: ruby-on-rails forms post model controller