我有一个资源,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,还是有更直接的方式?谢谢!
答案 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
所以,你不需要传递隐藏的字段或其他方法来澄清群组:它已经在网址中了......