【问题标题】:Form field value doesnt get sent未发送表单字段值
【发布时间】:2014-06-07 08:53:41
【问题描述】:

所以我有一个使用 simple_form gem 的 RoR 表单,奇怪的是,如果我将一个字符串放在表中具有整数类型的字段中,它甚至不会被发送,它只会发送一个空字符串,即使我在那里放上 'sdfsd' 之类的东西,为什么会这样?

表格:

= simple_form_for :product do |p|
 = p.input :price
 = p.button :submit

数据库表:

 create_table :products do |t|      
  t.integer :price, null: false
 end

型号:

class Product < ActiveRecord::Base

  validates :price, presence: true, inclusion: {in: 1..100}

end

因此,如果在价格字段中输入“blah blah”,它将发送:

参数:{"product"} => {"price" => ""}

【问题讨论】:

  • 一些代码 sn-p 可以帮助我们更好地帮助您:)
  • 我也有同样的问题。甚至没有发送字符值似乎很奇怪,这剥夺了我们验证和提供错误消息的机会。你找到解决办法了吗?

标签: ruby-on-rails forms request


【解决方案1】:

您需要提供代码,但为了让您理解,simple_form documentation 表明您可以使用 f.input :attribute_name,如下所示:

<%= simple_form_for @user do |f| %>
  <%= f.input :username %>
  <%= f.input :password %>
  <%= f.button :submit %>
<% end %>

这应该采用您的属性字段类型,并围绕它创建一个字段。

--

当您提到您有一个 integer 字段并且它“没​​有被发送”时,您应该确保您没有遇到 3 个潜在问题:

  1. attribute 在您的数据库中吗? (可能忘记运行rake db:migrate,虽然不太可能
  2. 您是否正确调用了form 中的属性?
  3. 您是否允许使用strong_params 方法将数据传递给您的模型?

我猜你的问题出在#3 - 要修复,你应该这样做:

#app/controllers/your_controller.rb
Class YourController < ApplicationController
   def create
      @model = Model.new(model_params)
      @model.save
   end

   private

   def model_params
      params.require(:model).permit(:attributes)
   end
end

【讨论】:

  • 感谢您的回答,我在问题中添加了一个小代码 sn-p 来解释我的意思,如果我在字段中输入一个数字,它工作正常,它得到验证,它被保存如果它正确等等,但是如果我尝试发送一个字符串而不是一个数字,它甚至不会去服务器进行验证,只是一个空字符串......我没有任何问题,只是想知道为什么会这样方式....
  • 这可能是因为您在数据库中将其设置为integer。你怎么能指望integer 处理string?如果您使用form_for(代替simple_form,您可能会看到一条错误消息,提示您无法将string 保存到integer 字段类型
  • 我明白这一切,我只是认为它至少会将其发送到服务器然后显示验证错误
  • :) 找出答案的最佳方法是使用form_for 进行测试。我认为这是simple_form 问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2023-03-14
  • 2014-11-26
  • 2016-06-25
  • 1970-01-01
相关资源
最近更新 更多