轨道 4 整数字段返回字符串



当我在number_field中输入内容并将表单发布到控制器时,Rails 无法保存,因为我有一个数字验证:

validates :rating, numericality: { greater_than: 0, less_than: 6 }

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

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

我用于调试的异常说我的:rating是字符串而不是整数。在此之前,我为@comment渲染了 json 错误,这说明:rating不是一个数字。

这些对于发现问题非常有用,但我找不到任何解决问题的方法。我检查了数据库模式,它说:rating应该是一个整数,如下所示:

 t.integer  "rating"
我不知道

此时该怎么办。有人可以帮助我吗?提前谢谢你。

附言我使用number_field.

附言在我的控制器中:

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

在我看来:

<% 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 %>

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

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

并且,使用form_for @comment,而不是comment_path

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

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 标签,我认为这应该可以解决这个问题。

在 comment_controller.rb 中尝试此操作

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

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

相关内容

  • 没有找到相关文章

最新更新