通过新表单传递ID
这个问题是关于我正在尝试的另一种方法:
通过新表单传递ID
我有一个group#view page
,由Person
访问。 在此页面中, Person
可以通过我开发的方法查看组的成员。 问题是我需要使用group
的Id,访问页面的person
的id以及来自该group
的id来创建模型Honors
。
在我的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
到表单,以创建一个新的荣誉:
@group.id, :person => current_person.id, :honored => agm.member.id) %>
但在我的表格中,我无法得到ids和东西
honors_path(:group_id, :person, :honored)) do |f| %>
我得到的错误是我找不到没有Id的Group。
有任何想法吗? 谢谢。
## 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
首先,您似乎缺少控制器方法。 与创建新对象的每个表单一起,通常有两个控制器方法
新
- 收集表单需要呈现的任何数据
- 呈现表单
创建
- 从表单收集数据
- 创建新对象
在我看来,你错过了新的方法。 在新方法中,您将收集表单所需的所有隐藏数据(例如,用户不会直接输入的信息,例如@person信息)。 然后,我会使用隐藏的表单参数将此信息放在您的表单中(而不是尝试将其放在表单URL中)。
目标 :从组#视图中,为组中的每个成员循环并创建和“添加荣誉”链接,同时跟踪特定成员的荣誉,所述成员被尊重的组以及表彰的人。
以下内容实现了这一目标。
路线:
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方法。 这假设所有关系都已正确建立。