Rails - проблемы с формой - PullRequest
0 голосов
/ 19 мая 2011

В моем приложении у меня есть 3 такие модели:

class Person
has_many :groups
has_many :group_memberships, :foreign_key => "member_id"
end

class Group_Membership
 belongs_to :member, :class_name => 'Person'
 belongs_to :group
end

class Group
belongs_to :person
has_many :group_memberships
has_many :members, :class_name => "Person", :through => "group_memberships", :foreign_key => "member_id"

Мне нужно создать кнопку на странице # show group, которая позволит Person запрашивать group_membership. По предложению из предыдущего вопроса я сделал def create_membership на моем контроллере Group_Membership:

def create_membership
  @group = Group.find params[:id]
  if @group.group_memberships.create( :member_id => params[:member_id])
     redirect_to @group
  else
     render :action => 'show'
  end
end

Итак, я перешел к своей форме в представлении группы # show и сделал следующее:

<%= form_for :group_membership, @group_membership, :url => { :action => "create_membership" } do |f| %>
<%= submit_tag "Create" %>
<% end %>

Но каждый раз, когда я нажимаю на кнопку, он перенаправляет меня на форму, чтобы создать новую группу, а не Group_Membership. Есть намеки? Заранее спасибо.

######## EDIT ##########

Ну, я вроде как изменил свой код на что-то вроде этого:

def create
@person = Person.find(current_person)
@group = Group.find(params[:group_id])
params[:group_membership] = {:member_id => @person.id, :group_id => @group.id}
@group_membership = Group_Membership.create(params[:group_membership])
if @group_membership.save
redirect_to @person
else
redirect_to @person
end
end

И моя форма сейчас такая:

<% form_for(:group_membership, :url => group_memberships_path(:member_id => current_person, :group_id => @group.id)) do |f| %> <%= submit_tag "Join!" %>

Теперь я могу создать модель group_membership, но оба идентификатора добавляются пустыми в столбец базы данных member_id и group_id.

Если я изменю строку @group_membership = Group_Membership.create(params[:group_membership]) на @group_membership = Group.Group_Membership.create(params[:group_membership]), я смогу сохранить идентификатор группы. То же самое происходит, если я перехожу на Person..

1 Ответ

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

просто немного почистить

def create
  @group_membership = Group_Membership.create(:group => Group.find(params[:group_id]), :member => Person.find(current_person))
  if @group_membership.save
    redirect_to @person
  else
    redirect_to @person
  end
end

этот код должен работать в rails 3 Я не уверен насчет более ранних версий

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