Ruby on rails Rails-Id可以';在表格中找不到

Ruby on rails Rails-Id可以';在表格中找不到,ruby-on-rails,ruby-on-rails-3,forms,Ruby On Rails,Ruby On Rails 3,Forms,有时间我陷入这个问题了。我正试图通过表单传递3个Id,以将数据保存到数据库中 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)

有时间我陷入这个问题了。我正试图通过表单传递3个Id,以将数据保存到数据库中

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.valid?
  flash[:success] = "Honor created."
  redirect_to (:back)
 else
  redirect_to (:back)
 end
end
在我看来,我称之为
new
方法:

<% @asked_groupmembership.each do |agm| %>
<%= link_to "Create Honor", new_honor_path(:group_id => @group.id, :person => current_person.id,
  :honored => agm.member.id) %> 
我怎样才能解决这个问题? 谢谢

###编辑##

class荣誉“person”,:foreign\u key=>“person\u id”
属于:荣誉,:类名=>'Person',:外键=>“荣誉id”
属于:组,:class\u name=>“组”,:foreign\u key=>“组\u id”

您需要使用以下内容更新创建方法:

def create
  @person = Person.find(current_person)
  @honor = Honor.create(:group_id => params[:honor][:group],
           :person_id => params[:honor][:person],
           :honored_id => params[:honor][:honored])
 if @honor.save
 ...
end
因为在提交表单后,您在params[:honor]中获得了数据。您可以在问题中发布的代码中看到传递给控制器的哈希:

"honor"=>{"group"=>"39",
 "person"=>"2",
 "honored"=>"44",

为了使它更具可读性,让我们这样做

表格:

表单中的每个隐藏字段都将作为
params[:honor]

现在,看看控制器,有些东西看起来不太对劲。如果没有错误,
create
方法将创建一个新实例并保存对象。调用
create
,然后调用
save
会起作用,但是您可以调用
new
(而不是
create
),然后调用
save
,或者继续使用
create
,然后使用
valid?
。我个人认为
new
then
save
过程更干净

例如:

def create
  @person = Person.find(current_person)
  @honor = Honor.new(
    :group => Group.find(params[:honor][:group_id]),
    :person => Person.find(params[:honor][:person_id]),
    :honored => Person.find(params[:honor][:honored_id])
  )

  if @honor.save
    ...
  end
end 

改变了答案。。。请看一看。谢谢它起作用了,我的名字都错了,对不起!。但是我在表单中传递的东西都是空白的,知道吗?我的意思是,当我检查我的数据库时,我保存了ID并创建了
荣誉
,但是表单中的所有内容都是
nil
。如果你在控制台中执行以下代码,你在db中得到了正确的记录?荣誉。创建(:组id=>3,:个人id=>2,:荣誉id=>1)是。我还添加了我的属性,保存的很好。
def create
  @person = Person.find(current_person)
  @honor = Honor.create(:group_id => params[:honor][:group],
           :person_id => params[:honor][:person],
           :honored_id => params[:honor][:honored])
 if @honor.save
 ...
end
"honor"=>{"group"=>"39",
 "person"=>"2",
 "honored"=>"44",
<% form_for @honor do |f| %>
  <%= f.hidden_field :group_id, :value => @group.id %>
  <%= f.hidden_field :person_id, :value => current_person.id %>
  <%= f.hidden_field :honored_id, :value => @honored.id %>
  ...
<% end %>
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[:honor][:group_id]),
    :person => Person.find(params[:honor][:person_id]),
    :honored => Person.find(params[:honor][:honored_id])
  )

  if @honor.save
    ...
  end
end
def create
  @person = Person.find(current_person)
  @honor = Honor.new(
    :group => Group.find(params[:honor][:group_id]),
    :person => Person.find(params[:honor][:person_id]),
    :honored => Person.find(params[:honor][:honored_id])
  )

  if @honor.save
    ...
  end
end