Передача идентификаторов через новую форму - PullRequest
0 голосов
/ 24 мая 2011

Этот вопрос о другом подходе, который я пытаюсь к тому, который задают здесь:

Передача идентификаторов через новую форму

У меня есть group#view page, к которому обращается Person. На этой странице Person может видеть членов группы с помощью методов, которые я разработал. Проблема в том, что мне нужно создать модель Honors с использованием идентификатора из group, идентификатора из person доступа к странице и идентификатора из 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) %> 

Но в моих формах я не могу получить идентификаторы и прочее

<% form_for(:honor, :url => honors_path(:group_id, :person,
 :honored)) do |f| %>

Ошибка, которую я получаю, заключается в том, что я не могу найти группу без идентификатора.

Есть идеи? Спасибо.

## 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

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Во-первых, кажется, что вам не хватает метода контроллера.Наряду с каждой формой, которая создает новый объект, обычно есть два метода контроллера

new

  • Собирает любые данные, которые форма должна отобразить сама
  • Отрисовываетform

create

  • Собирает данные из формы
  • Создает новый объект

Это выглядит каквам не хватает нового методаВ новом методе вы собираете все скрытые данные, которые нужны форме (например, информацию, которую пользователь не собирается вводить напрямую, например, информацию @person).Затем я поместил бы эту информацию в вашу форму, используя скрытые параметры формы (а не пытаясь поместить ее в URL-адрес формы).

0 голосов
/ 24 мая 2011

Цель : в представлении group # выполните цикл, создайте и создайте ссылку «Add Honor» для каждого члена группы, отслеживая при этом удостоенный звания конкретного члена, группу, в которой указанный член почитается и человек, который чтит.

Следующее выполняет эту задачу.

Маршрут:

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]))

В этом сценарии вам не нужен метод honor # new, вы переходите непосредственно к методу create. Это предполагает, что все отношения установлены правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...