当我在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}}
答案 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
将评级的每个输入转换为整数