通过新表单传递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方法。 这假设所有关系都已正确建立。