这个问题是关于我正在尝试的另一种方法:
Passing IDs through a new Form
我有group#view page
,可由Person
访问。在此页面中,Person
可以通过我开发的方法查看该组的成员。问题是我需要使用Honors
中的ID,访问该页面的group
中的ID以及来自person
的ID来创建模型member
这个group
。
在我的Honors控制器中,我有:
def create
@person = Person.find(current_person)
@asked_groupmembership = @person.owned_group_memberships.find_all_by_status(true,:include => [:group, :member])
@asked_groupmembership.each do |agm|
@honor = Honor.create(:group => Group.find(params[:group_id]),
:person => Person.find(current_person), :honored => Person.find(agm.member.id))
end
if @honor.save
...
end
在我看来,我有一个链接指示person
到表单以创建新荣誉:
<% @asked_groupmembership.each do |agm| %>
<%= link_to "Create Honor", new_honor_path(:group_id => @group.id, :person => current_person.id,
:honored => agm.member.id) %>
但在我的表格中,我无法得到ids和东西
<% form_for(:honor, :url => honors_path(:group_id, :person,
:honored)) do |f| %>
我得到的错误是我找不到没有Id的组。
有什么想法吗?感谢。
## Edited2 ##
更改了我的crontroller
def new
#@person = Person.find(params[:person])
#@honored = Person.find(params[:honored])
#@group = Group.find(params[:group_id])
@honor = Honor.new
end
def create
@person = Person.find(current_person)
@honor = Honor.create(:group => Group.find(params[:group_id]),
:person => Person.find(params[:person]),
:honored => Person.find(params[:honored]))
if @honor.save
...
end
答案 0 :(得分:2)
首先,您似乎缺少控制器方法。除了创建新对象的每个表单外,通常还有两个控制器方法
新
创建
在我看来,你错过了新方法。在新方法中,您将收集表单所需的所有隐藏数据(例如,用户不会直接输入的信息,例如@person信息)。然后,我会使用隐藏的表单参数将此信息放在您的表单中(而不是尝试将其放在表单URL中)。
答案 1 :(得分:0)
目标:从组#视图中,为组中的每个成员循环并创建和“添加荣誉”链接,同时跟踪特定成员被尊重的组,其中所述成员荣幸,尊敬的人。
以下内容实现了这一目标。
<强>路线:强>
match "honors/:group/:person/:honored" => "honors#create", :as=>"my_custom_new_honor"
群组视图:
<% @asked_groupmembership.each do |agm| %>
<%= link_to "Create Honor", my_custom_new_honor_path(:group=> @group.id, :person => current_person.id,:honored => agm.member.id) %>
荣誉控制器,创建方法
@honor = Honor.create(:group => Group.find(params[:group_id]),
:person => Person.find(params[:person]),
:honored => Person.find(params[:honored]))
在这种情况下,您不需要荣誉#new方法,您将直接进入create方法。这假设所有关系都已正确建立。