gpt4 book ai didi

ruby-on-rails - 我该如何修复这个创建函数?

转载 作者:数据小太阳 更新时间:2023-10-29 08:50:42 26 4
gpt4 key购买 nike

我有一个函数可以将嵌套的属性拆分成一个数组,这样就可以检查它们的唯一性,然后保存它们。问题是,我收到了一个 Can't mass-assign protected attributes: _destroy 错误,因为 nested_form gem 插入了一个 hidden_​​field 来突出显示哪些属性应该被删除。

这是 *Posts_Contoller.rb* 创建函数:

def create
location_set = params[:post].delete(:locations_attributes) unless params[:post][:locations_attributes].blank?

@post = current_blogger.blog_posts.new(params[:post])

@post.locations = Location.find_or_initialize_location_set(location_set) unless location_set.nil?


if @post.save
redirect_to @post, notice: 'Blog post was successfully created.'
else
render action: "new"
end
end

这是 location.rb 中的函数:

def self.find_or_initialize_location_set(location_set)
#create a locations array
locations = []
locations = locations.delete_if { |elem| elem.flatten.empty? }

location_set.each do |key, location|
locations << find_or_initialize_by_name(location)
end

locations

end

这是日志:

 Started POST "/blog/posts" for 127.0.0.1 at 2012-12-03 17:31:54 +0000
Processing by Blogit::PostsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"r74iCzC4tJgVI6FiCEH7XzfiTmaqKihF5JSs7Ow3MSI=", "post"=>{"title"=>"This
is a post about Paris", "body"=>"This is a post about ParisThis is a post about Paris
This is a post about ParisThis is a post about Paris", "tag_list"=>"",
"locations_attributes"=>{"0"=>{"_destroy"=>"false", "name"=>"Paris", "longitude"=>"2.3522219", "latitude"=>"48.856614"}, "1354555760002"=>{"_destroy"=>"false", "name"=>"Los Angeles", "longitude"=>"-118.5155901", "latitude"=>"3
4.03563310000001"}}}, "_wysihtml5_mode"=>"1", "name"=>"losds", "legname"=>"Los Angeles", "longitude"=>"-118.5155901", "latitud
e"=>"34.03563310000001", "commit"=>"Submit"}

User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
ActsAsTaggableOn::Tag Load (0.1ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" W
HERE "taggings"."taggable_id" IS NULL AND "taggings"."taggable_type" = 'Blogit::Post' AND (taggings.context = 'tags' AND taggings.tagger_id IS NULL)

Location Load (0.1ms) SELECT "locations".* FROM "locations" WHERE "locations"."name" = 'Paris' LIMIT 1
LOGGER LOCATIONS ARE[#<Location id: 768, name: "Paris", latitude: #<BigDecimal:7f86aadf6230,'0.48856614E2',18(45)>, longitude:
#<BigDecimal:7f86aadf5f60,'0.23522219E1',18(45)>, post_id: nil, created_at: "2012-12-01 17:27:33", updated_at: "2012-12-01 17
:27:33", notes: nil>]
Location Load (0.2ms) SELECT "locations".* FROM "locations" WHERE "locations"."name" = 'Los Angeles' LIMIT 1
Completed 500 Internal Server Error in 97ms

ActiveModel::MassAssignmentSecurity::Error (Can't mass-assign protected attributes: _destroy):
app/models/location.rb:23:in `block in find_or_initialize_location_set'
app/models/location.rb:21:in `each'
app/models/location.rb:21:in `find_or_initialize_location_set'
app/controllers/blogit/posts_controller.rb:79:in `create'

关于我如何调整它以像以前一样在参数中包含删除函数的任何建议,但是我没有得到 Can't mass-assign protected attributes: _destroy 错误?

谢谢!

最佳答案

您可以通过将此添加到您的位置模型来消除此错误:

# NOT PERSISTENT
attr_accessor :_destroy
# ...
attr_accessible :_destroy

如果没有这个,_destroy 属性将受到保护以防止 mass assignment当您尝试为其赋值时,无论如何都会抛出异常。

关于ruby-on-rails - 我该如何修复这个创建函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com