Rails更新操作不更新

时间:2016-09-16 21:00:10

标签: ruby-on-rails forms ruby-on-rails-4

尝试更新帖子的匿名性:

视图中的

<%= form_for (post), remote: true do |f| %>
                            <%= f.check_box :anonymous %>
                            <span>Anonymous</span>
                            <%= f.submit 'Save' %>
                        <% end %>

控制器

def update
@post = Post.find(params[:id])
if @post.update_attributes(permit_post)
  puts 'aaaaaaaaaaaaaaa'
  puts @post.anonymous === true
  puts 'aaaaaaaaaaaaaaa'
  respond_to do |format|
   format.html
   format.js
  end
end
end
private 
def permit_post
params.require(:post).permit(:image, :title, :long, :anonymous, :facenumber);
end
控制台中的

    Started PATCH "/posts/9" for 94.187.88.109 at 2016-09-16 20:58:09 +0000
Processing by PostsController#update as JS
  Parameters: {"utf8"=>"✓", "post"=>{"anonymous"=>"1"}, "commit"=>"Save", "id"=>"9"}
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 2]]
  Post Load (0.2ms)  SELECT  "posts".* FROM "posts" WHERE "posts"."id" = ?  ORDER BY created_at DESC LIMIT 1  [["id", 9]]
   (0.2ms)  begin transaction
   (0.1ms)  rollback transaction
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction
  Rendered posts/update.js.erb (0.1ms)
Completed 200 OK in 150ms (Views: 22.4ms | ActiveRecord: 0.9ms)

有没有错误,但属性没有更新。 谢谢您的帮助 的更新 在模型中

class Post < ActiveRecord::Base
include PublicActivity::Common
cattr_accessor :current_user
cattr_accessor :user_id
acts_as_votable
has_attached_file :image, styles: { medium: "550", large: "600", thumb: "100x100>" }, default_url: "/missing.png"
validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
belongs_to :user
belongs_to :category
validates :user_id, presence: true
validates :image, presence: true
has_many :comments

2 个答案:

答案 0 :(得分:1)

在我看来,验证并没有通过。正如您在控制台中看到的那样,您没有打印任何评估。这意味着update_attributes正在返回false

为什么不使用byebug来设置断点并评估@post.errors.messages.inspect,以检查它为什么不更新?如果您不想将byebug包含在您的开发宝石中,另一种选择是Rails.logger.info(@post.errors.messages.inspect)。当然,需要在@post.update_attributes之后(if完成)

答案 1 :(得分:0)

您在01获得了布尔值,但ruby了解truefalse。因此,您需要在保存之前将1转换为true并将0转换为false。您可以在Post模型中执行此操作

before_validation :convert_boolean

def convert_boolean
  self.anonymous = (anonymous != nil and anonymous != '0')      
end

为了避免这种情况,您也可以在参数中传递true / false而不是0 / 1

试试这个

<%= f.check_box :anonymous, {}, true, false %>

希望有所帮助!