我的模特:
class Event < ActiveRecord::Base
belongs_to :organization
has_many :directors
has_many :vips, :through => :directors
end
class Vip < ActiveRecord::Base
belongs_to :organization
has_many :directors
has_many :events, :through => :directors
end
class Director < ActiveRecord::Base
belongs_to :vip
belongs_to :event
end
我的新活动表格
<%= form_for [@organization, @event] do |f| %>
<p>
<%= f.label :when %>
<%= f.date_select :when %>
</p>
<p>
<%= f.label :name %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :vip %>
<%= f.select :vip_id, options_for_select(@organization.vips.all.map {|v| [v.name, v.id]}) %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
我的事件控制器:
def new
@organization = Organization.find(params[:organization_id])
@event = @organization.events.new
@director = Director.new
end
def create
@organization = Organization.find(params[:organization_id])
@event = @organization.events.build(event_params)
if @event.save
redirect_to organization_path(@organization)
else
render 'new'
end
end
所以,我的Vips是在流程的早期创建的,并且位于vips表中。当我提交新的活动表格时,我得到了一个新的活动表条目。 我想要做的事情是在我提交新活动表单时,我的导演表会填充新条目。 director表需要我刚刚创建的事件的event_id,以及表单中select标签的vip_id。
我考虑将此添加到创建操作
def create
@director = Director.new
if @event.save
redirect_to organization_path(@organization)
@director.vip_id = @event.vip_id
@director.event_id = @event.id
但这并未创建导演表的条目。有没有办法做到这一点,我没有看到?
答案 0 :(得分:0)
Map<String, String> stringMap = new HashMap<>();
stringMap.put("username", "yourusername");
stringMap.put("password", "yourpassword");
...
String requestBody = buildRequestBody(stringMap);
所以,你有这两项任务, @director.vip_id = @event.vip_id
@director.event_id = @event.id
这一项很好,因为你刚刚创建了这个事件而你有@director.event_id = @event.id
。
但是,第一个不起作用。查看您的模型关联,@event.id
没有@event
,因此您无法调用vip_id
。您必须通过@event.vip_id
转到vip
,例如:
organization
或,@event.organization.vips.first.vip_id
这也可以用@event.vips.first.vip_id
关联。
这两个是我看到获得与事件相对应的有效:through => :directors
的唯一方式。虽然,这只会获得第一个vip_id
,或者您可以在vip_id
子句中指定一些条件来获取该事件的特定where
。
如果这对你有用,那很好。否则,您可能需要重新考虑模型之间的关联。