首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过新窗体传递ID

通过新窗体传递ID
EN

Stack Overflow用户
提问于 2011-05-24 14:48:38
回答 2查看 285关注 0票数 0

这个问题是关于另一种方法的,我想问的是:

Passing IDs through a new Form

我有一个group#view page,它是由Person访问的。在这个页面中,Person可以通过我开发的方法看到这个组的成员。问题是,我需要使用来自group的Id、来自访问页面的person的id以及来自该groupmember的id创建模型group

作为我的主计长,我有:

代码语言:javascript
复制
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链接:

代码语言:javascript
复制
<% @asked_groupmembership.each do |agm| %>
  <%= link_to "Create Honor", new_honor_path(:group_id => @group.id, :person => current_person.id,
  :honored => agm.member.id) %> 

但在我的表格里我不能拿到身份证之类的东西

代码语言:javascript
复制
<% form_for(:honor, :url => honors_path(:group_id, :person,
 :honored)) do |f| %>

我遇到的错误是,没有Id我就找不到Group。

有什么想法吗?谢谢。

##Edited2##

改变了我的crontroller

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2011-05-24 15:32:42

首先,您似乎缺少了一个控制器方法。与创建新对象的每个窗体一起,通常有两个控制器方法。

新的

  • 收集表单需要呈现的任何数据
  • 呈现表单

创建

  • 从表单
  • 收集数据,创建新的对象

在我看来,你好像错过了新的方法。在新方法中,您将收集表单所需的所有隐藏数据(例如,用户不会直接输入的信息,如@person信息)。然后,我将使用隐藏的表单参数(而不是试图将其放在表单URL中)将此信息放入表单中。

票数 2
EN

Stack Overflow用户

发布于 2011-05-24 15:56:33

目标:从group#view循环开始,为组中的每个成员创建和添加荣誉链接,同时跟踪特定成员被授予的荣誉、所述成员被授予荣誉的组以及被授予荣誉的人。

以下内容实现了这一目标。

路线:

代码语言:javascript
复制
match "honors/:group/:person/:honored" => "honors#create", :as=>"my_custom_new_honor"

组视图:

代码语言:javascript
复制
<% @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) %> 

荣誉控制器,创建方法

代码语言:javascript
复制
@honor = Honor.create(:group => Group.find(params[:group_id]),
                      :person => Person.find(params[:person]),
                      :honored => Person.find(params[:honored]))

在这个场景中,您不需要honor#new方法,而是直接使用create方法。这假定所有关系都已正确建立。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6112340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档