尝试更新帖子的匿名性:
视图中的
<%= 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
端
答案 0 :(得分:1)
在我看来,验证并没有通过。正如您在控制台中看到的那样,您没有打印任何评估。这意味着update_attributes
正在返回false
。
为什么不使用byebug
来设置断点并评估@post.errors.messages.inspect
,以检查它为什么不更新?如果您不想将byebug包含在您的开发宝石中,另一种选择是Rails.logger.info(@post.errors.messages.inspect)
。当然,需要在@post.update_attributes
之后(if
完成)
答案 1 :(得分:0)
您在0
和1
获得了布尔值,但ruby
了解true
和false
。因此,您需要在保存之前将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 %>
希望有所帮助!