Rails 4整数编号字段返回字符串

时间:2015-06-17 11:19:35

标签: ruby-on-rails forms validation types integer

当我在validates :rating, numericality: { greater_than: 0, less_than: 6 } 中输入内容并将表单发布到控制器时,Rails无法保存,因为我有一个数值验证:

raise "It exploded into pieces!" unless @comment.save

我用这段代码调试了控制器:

:rating

我用于调试的异常表示我的@comment是一个字符串而不是一个整数。在此之前,我为:rating呈现了json错误,并且表示:rating不是数字。

这些对于发现问题非常有用,但我找不到任何解决方案来解决问题。我检查了数据库模式,它说 t.integer "rating" 应该是一个整数,如:

number_field

此时我不知道该怎么做。有人能帮助我吗?提前谢谢。

P.S。我使用def ccreate @comment = Comment.new(params.permit(:rating, :body, :name, :game_id)) raise "It exploded into pieces!" unless @comment.save end

P.P.S。 在我的控制器中:

<% if @comments.count < 10 %>
    <%= form_for(comment_path) do |f| %>
      <div class="field">
        <%= f.label :rating %><br>
        <%= f.number_field :rating %>
      </div>
      <div class="field">
        <%= f.label :body %><br>
        <%= f.text_area :body %>
      </div>
      <div class="field">
        <%= f.label :name %><br>
        <%= f.text_field :name %>
      </div>
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
<% end %>

在我看来:

{{1}}

3 个答案:

答案 0 :(得分:3)

这是一个强大的障碍。允许:注释,然后是属性

params.require(:comments).permit(:rating, :body, :name, :game_id)

并使用form_for @comment,而不是comment_path

答案 1 :(得分:0)

我认为您需要正确设置表单,我认为如果表单应该发布,验证将正常工作:

comments_controller.rb

def new
  @comment = Comment.new
end

def create
  @comment = Comment.new(comment_params)
  raise "It exploded into pieces!" unless @comment.save
end

private

def comment_params
  params.require(:comment).permit(:rating, :body, :name, :game_id)
end

我们正在改变强参数,以便在参数中使用新的注释键(这将是对下面视图的第二次更改的结果)。我还把它移到私人函数中来清理它。

那么在你看来:

<% if @comments.count < 10 %>
    <%= form_for(@comment) do |f| %>
      <div class="field">
        <%= f.label :rating %><br>
        <%= f.number_field :rating %>
      </div>
      <div class="field">
        <%= f.label :body %><br>
        <%= f.text_area :body %>
      </div>
      <div class="field">
        <%= f.label :name %><br>
        <%= f.text_field :name %>
      </div>
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
<% end %>

这将使用form_for标记和模型实例,我认为应该解决这个问题。

答案 2 :(得分:0)

在comment_controller.rb中尝试这个

  

@rating = params[:comment][:rating].to_i

将评级的每个输入转换为整数