在Ruby on Rails中没有将条目保存到数据库?

3
我已创建了一个名为tenants的表,其中包含以下列。
class CreateTenants < ActiveRecord::Migration
  def change
    create_table :tenants do |t|
      t.text :company_name
      t.text :work_area
      t.text :second_pref
      t.text :third_pref
      t.integer :who_are_you
      t.integer :number_of_bedroom
      t.text :other_specs
      t.string :budget
      t.string :name
      t.string :email
      t.string :contact_number

      t.timestamps null: false
    end
  end
end

我正在通过下面的表单将数据输入到表格中:

        <%= form_for Tenant.new do |val| %>

                <%= val.label :company_name, "Company Name" %>
                <%= val.text_field :company_name, class: 'form-control' %>

                <%= val.label :work_area, "Work Area" %>
                <%= val.text_field :work_area, class: 'form-control' %>

                <%= val.label :second_pref, "Second Preference" %>
                <%= val.text_field :second_pref, class: 'form-control' %>

                <%= val.label :third_pref, "Third Preference" %>
                <%= val.text_field :third_pref, class: 'form-control' %>

                <%= val.label :who_are_you, "Are you Family/Bachelor?" %>
                <%= val.text_field :who_are_you, class: 'form-control' %>

                <%= val.label :number_of_bedroom, "Number of Bedroom" %>
                <%= val.text_field :number_of_bedroom, class: 'form-control' %>

                <%= val.label :other_specs, "Other Requirments" %>
                <%= val.text_field :other_specs, class: 'form-control' %>

                <%= val.label :budget, "Your Budget" %>
                <%= val.text_field :budget, class: 'form-control' %>

                <%= val.label :name, "Name" %>
                <%= val.text_field :name, class: 'form-control' %>

                <%= val.label :email, "Email" %>
                <%= val.text_field :email, class: 'form-control' %>

                <%= val.label :contact_number, "Contact Number" %>
                <%= val.text_field :contact_number, class: 'form-control' %>

                <%= val.submit "Submit", class: "btn btn-primary" %>

    <% end %>

当我填写所有必填字段并点击提交时,我在Rails服务器日志中看到以下输出。
Started POST "/tenants" for ::1 at 2015-11-15 11:41:27 +0530
Processing by TenantsController#create as HTML
  Parameters: {
"utf8"=>"✓", "authenticity_token"=>"26KYMFmofF+A1UrF+eWu21nEGbVO3n2bUSPl8340k8hY1JQhYF2kfhOHLmlF+r1Tj5UB7h6H+IJ7MY+Rx+o4CA==",
"tenant"=>
  {
  "company_name"=>"Housing.com",
  "work_area"=>"Hiranandani Business Park",
  "second_pref"=>"Chandivali",
  "third_pref"=>"Vikhroli",
  "who_are_you"=>"Bachelor",
  "number_of_bedroom"=>"3",
  "other_specs"=>"Gym, Swimming Pool",
  "budget"=>"55000",
  "name"=>"Shravan Kumar Gond",
  "email"=>"shravan.ma.iitkgp@gmail.com",
  "contact_number"=>"9475593772"
  },
"commit"=>"Submit"
}
Unpermitted parameter: budget
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction

有人能告诉我,为什么会发生这种情况吗?

1
你能提供你的控制器代码,特别是强参数吗? - Zoran
2个回答

3

看起来你在tenants_controller.rb文件的strong parameters中缺少:budget。应该像这样:

private

    def tenant_params
        params.require(:tenant).permit(:company_name, 
                                   :work_area, 
                                   :second_pref, 
                                   :third_pref, 
                                   :who_are_you, 
                                   :number_of_bedroom, 
                                   :other_specs,
                                   :budget,
                                   :name, 
                                   :email, 
                                   :contact_number)
    end

2

未经许可的参数:budget

这是您的错误-这意味着您正在向controller传递参数,但它无法将它们保存在您的model中。

解决方法是设置 strong params 方法(如 shravan40 建议的那样)。


由于您在#new操作中调用了Tenant.new,因此建议您在控制器中使用以下内容:

#app/controllers/tenants_controller.rb
class TenantsController < ApplicationController
   def new
      @tenant = Tenant.new
   end 
   def create
      @tenant = Tenant.new tenant_params
      @tenant.save
   end

   private

   def tenant_params
      params.require(:tenant).permit(:company_name, :work_area, :second_pref, :third_pref, :who_are_you, :number_of_bedroom, :other_specs, :budget, :name, :email, :contact_number)
   end
end

还有一些事情可以做来优化您的表单...

<%= form_for @tenant do |val| %>
   <% vals = [[:company_name],[:work_area],[:second_pref, "Second Preference"], [:third_pref, "Third Preference"],[:who_are_you, "Are you Family/Bachelor?"], [:number_of_bedroom], [:other_specs, "Other Requirements"],[:budget, "Your Budget"], [:name], [:email], [:contact_number]] %> 

   <% vals.each do |value| %>
       <% value[1] ||= value[0].to_s.gsub("_", " ") %>
       <%= val.label value[0], value[1] %>
       <%= val.text_field value[0], class: 'form-control' %>
   <% end %>

   <%= val.submit "Submit", class: "btn btn-primary" %>
<% end %>

答案的最后一部分真是太棒了。 - Shravan40
谢谢,伙计!如果它有效,否则它只是漂亮的花哨 >.< - Richard Peck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接