获取表单的新嵌套资源的父ID

时间:2015-08-20 22:43:10

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个资源,Decision,属于group_to Group。集团有很多决定。我希望在数据库中保存的每个决策中,将一个组的主键(id)保存在整数字段group_id上。我这样做是有效的,但这似乎是一种非常愚蠢的方式。是否有更直接或" Railsy"这样做的方法?

首先,我的控制器操作/视图有一个组实例变量,我以这种方式链接到表单:

<%= link_to "New decision", new_group_decision_path(@group) %>

..这样我的表单就在/ groups /:group_id / decisions / new

我在 DecisionsController 下的新方法为表单创建了一个新的@decision,并将它传递给了我从params获得的group_id。

def new
  @decision = Decision.new(group_id: params[:group_id]
end

然后我在 new.html.erb 的表单中提取@ decision.group_id并将其放在hidden_​​field中,以便使用group_id创建决策。我是否需要通过params,然后是实例变量,然后通过隐藏字段传递group_id,还是有更直接的方式?谢谢!

1 个答案:

答案 0 :(得分:2)

首先,更改您的new操作,使其更多&#34; railsey&#34; ...对控制器进行一些细微更改

before_action :set_group, only: [:new, :create] # or other actions that do not apply here

def new
    @decision = @group.decisions.build # or new
end

def create
    @decision = @group.decisions.create(decision_params)
end


private
    def set_group
        @group=Group.find(params[:group_id])
    end

    def decision_params
        params.require(:decision).permit(:list,:of,:permitted,:params)
    end

所以,你不需要传递隐藏的字段或其他方法来澄清群组:它已经在网址中了......

相关问题