我有两个模特,场地和音乐会。音乐会属于场地,场地有许多音乐会。在我的表单中,我使用自定义设置器设置音乐会场地,表单如下:
<%= form_for @concert do |f| %>
<%= f.label :venue_name, "Venue" %>
<%= f.text_field :venue_name %>
然后在我的模型中:
def venue_name=(name)
self.venue = Venue.find_or_create_by_name(name) if name.present?
end
这个问题是,如果正在创建模型,我还想为模型添加一个地址。这可能与孩子的形式有关吗?是否可以将名称和地址都传递给setter?
编辑:
正如下面建议的评论,我已经转移到使用accepts_nested_attributes_for。 Ryan Bates在这里有一个很棒的截屏视频:http://railscasts.com/episodes/196-nested-model-form-revised或文档也很好。
我之前使用过accept_nested这个,但是因为这是在belongs_to方面的事情而挣扎。我现在已经解决的问题是,对于这个例子,不是做@ concert.venue.build,而且belongs_to方面的语法是@ concert.build_venue
答案 0 :(得分:0)
如果您向用户显示他们可以在模型上添加用逗号分隔的名称和地址,在符号,分号等处,您可以使用正则表达式将它们分开,并分别插入它们中的每一个。
def venue_name=(name)
venue = name.split(',')[0] # The comma (,) can be any symbol
address = name.split((',')[1]
# Insert venue
# Insert address
end
这是一种丑陋的方式。