Ruby on rails 具有联接表关联的Rails ajax表单

Ruby on rails 具有联接表关联的Rails ajax表单,ruby-on-rails,ajax,ruby-on-rails-3,Ruby On Rails,Ajax,Ruby On Rails 3,我试图在rails中的两个模型之间构建一个“ajaxy”表单。以下是相关的文件和代码片段 我的模型 app/views/groups/show.html.erb 我的最终目标是,当用户查看组(显示动作/视图)时,他们可以添加与该组关联的快照,因此,当用户添加快照时,会在组快照表中创建正确的条目 您可以在快照控制器中看到,保存快照时,我正在成功地在组/快照表中创建一个新条目。我得到的是shot\u id,而不是group\u id。这就是问题所在,我如何在这个视图/控制器中获得group\u id

我试图在rails中的两个模型之间构建一个“ajaxy”表单。以下是相关的文件和代码片段

我的模型 app/views/groups/show.html.erb 我的最终目标是,当用户查看组(显示动作/视图)时,他们可以添加与该组关联的快照,因此,当用户添加快照时,会在组快照表中创建正确的条目


您可以在快照控制器中看到,保存快照时,我正在成功地在组/快照表中创建一个新条目。我得到的是shot\u id,而不是group\u id。这就是问题所在,我如何在这个视图/控制器中获得group\u id。非常感谢您的帮助。

我的建议是将组id作为参数传递给您的组控制器中的“调用新的快照路径”显示视图:

new_shot_path(group_id: @group)
然后将其作为隐藏字段包含在快照(控制器#新视图)中使用的表单中,使用隐藏字段(标记):

<%= hidden_field_tag 'group_id', @group.id %>

请记住,在快照(u controller#create)中,您正在做两件事--创建快照和将其与组关联,这可能有点不正常。从代码中可以看出,在没有关联组的情况下,似乎永远不会创建快照。如果你的出发点总是来自观察组(然后向选定的组添加镜头),那么你可能会考虑把这个移动到GroupSub控制器中,比如像“AdxAdjyStudio”,但是这要取决于你的应用程序是如何构建的。

谢谢各位,我不打算这样做。注意,尽管这在groups视图中,所有的逻辑都发生在shots_控制器中,但这是调用ajax/部分的原因。该组已经创建,我只需要以某种方式获取id。然后我认为您必须在对groups/show.html中的new\u shot\u path的调用中将其作为参数传递--
new\u shot\u path(group\u id:@group)
。但是我相信如果你这样做的话,你将不得不修改路线来识别参数。这是一个很好的决定,肯定会让我更接近。这是我现在拥有的。我可以在新操作中创建@group,但这不会持续到创建为止。我会继续看的。如此接近@组不会自动结转。您必须将它从“new”表单传递到“create”——我通常使用隐藏的\u field\u标记来完成此操作。在“new”中使用的表单中添加一个隐藏的\u form\u标记,将其命名为group\u id,并将其值设置为@group.id。然后,在show#create方法中,将其从params散列中拉出
group_id=params[:group_id]
。在对GroupShot.create的调用中,将
:group\u id=>@group.id
替换为
:group\u id=>group\u id
哇……这太糟糕了。我想去洗个澡。我的结局是:这感觉很脏。ajax在rails中是否总是感觉如此肮脏?
$('#new_shot').hide().after('<%= j render("form") %>');
 def create
    @shot = Shot.new(params[:shot])

    respond_to do |format|
      if @shot.save
        GroupShot.create! :shot_id => @shot.id

 def new
    @shot = Shot.new
 end
new_shot_path(group_id: @group)
<%= hidden_field_tag 'group_id', @group.id %>
GroupShot.create! :shot_id => @shot.id, :group_id => params[:group_id]