class Member < ActiveRecord::Base
has_many :posts
accepts_nested_attributes_for :posts
end
params = { :member => {
:name => 'joe', :posts_attributes => [
{ :title => 'Kari, the awesome Ruby documentation browser!' },
{ :title => 'The egalitarian assumption of the modern citizen' },
]
}}
member = Member.create(params['member'])
执行此操作后,我想在保存后将params散列中的posts_attributes中的元素映射到id(主键)。当accepts_nested_attributes_for构建或创建每条记录时,我能做些什么吗
PS:posts_attributes数组可能不包含序列中的索引我的意思是这个数组可能不包含像0,1,2这样的索引它可以包含索引,如0,127653,7863487,因为我通过javascript动态创建表单元素
另外,我想只关联在Post中创建的新记录而不是现有的Post
先谢谢
答案 0 :(得分:1)
您是否考虑过刷新posts
关联并完全抓取posts_attributes
数组?
不幸的是,没有一种可靠的方法来做你想做的事。你可以尝试使用字符串匹配来循环遍历两者并找到与内容相关联的ID,但是如果帖子上没有保证是唯一值的字段,那么就没有一种有效的方法。
答案 1 :(得分:0)
虽然我不太确定你想用什么ID分配哪些元素,但我认为这种方法会给你一个提示。
您可以将方法名称符号分配给:reject_if
,然后将您的逻辑放入该方法中,如下所示:
class Member < ActiveRecord::Base
has_many :posts
accepts_nested_attributes_for :posts, :reject_if => :reject_posts?
def reject_posts?(attrs)
# You can do some assignment here
return true if attrs["title"].blank?
post_exist = self.posts.detect do |p|
p.title == attrs["title"]
end
return post_exist
end
end