我正在尝试在rails中的两个模型之间构建一个'ajaxy'形式。这里是相关的文件和代码片段......
ActiveRecord::Schema.define(:version => 20140214134314) do
create_table "group_shots", :force => true do |t|
t.integer "shot_id"
t.integer "group_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "groups", :force => true do |t|
t.string "name"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "shots", :force => true do |t|
t.string "name"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
end
<b>Name:</b>
<%= @group.name %>
<%= link_to 'New Shot', new_shot_path, id: "new_shot", remote: true %></br>
$('#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
我的最终目标是当用户正在查看组(显示操作/视图)时,他们可以添加与该组关联的镜头,因此当用户添加镜头时,在group_shot中创建正确的条目表
您可以在镜头控制器中看到,当保存镜头时,我正在成功创建组/镜头表中的新条目。我得到的是shot_id,但不是group_id。这就是问题,如何在此视图/控制器中获取group_id。任何帮助表示赞赏。
答案 0 :(得分:0)
我的建议是将group_id作为参数传递给groups_controller中的new_shot_path调用#show view:
new_shot_path(group_id: @group)
然后使用hidden_field_tag将其作为您在shots_controller#new视图中使用的表单中的隐藏字段包含在内:
<%= hidden_field_tag 'group_id', @group.id %>
然后将其包含在您对ShotShot#create的创建方法中对GroupShot #create的调用中:
GroupShot.create! :shot_id => @shot.id, :group_id => params[:group_id]
请记住,你在shot_controller #create中做了两件事 - 创建镜头并将其关联回组,这可能有点不正统。从您的代码中可以看出,如果没有关联的组,则永远不会创建Shot。如果您的起点总是来自查看组(然后将镜头添加到选定的组),您可能需要考虑将其移动到groups_controller,如#add_shot,但这将取决于您的应用程序的其余部分是如何构建的