【问题标题】:Rails - Form problemsRails - 表单问题
【发布时间】:2011-05-19 12:16:31
【问题描述】:

在我的应用中,我有 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"

我需要在 group#show 页面中创建一个按钮,允许 Person 请求 group_membership。根据上一个问题的建议,我在 Group_Membership 控制器上创建了 def create_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

所以我继续我的表单,在 group#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 模型,但两个 id 都在数据库列 member_idgroup_id 中添加为空白。

如果我将@group_membership = Group_Membership.create(params[:group_membership]) 行更改为@group_membership = Group.Group_Membership.create(params[:group_membership]),我可以保存组ID。如果我更改为Person.,也会如此。

【问题讨论】:

  • 也许你应该更好地使用HABTM关系?它将简化事情 Group_Membership 模型中有哪些字段?
  • 感谢您的回复!我有两个 ID,来自成员(个人)和组,还有一个布尔值 status,默认情况下是 false。我的想法是在group_membership 上添加一个模型,总是一个人想加入一个组。当 Group Owner 将 status 更改为 true 时,他/她将接受此成员资格,并通过销毁模型来拒绝它。

标签: ruby-on-rails ruby-on-rails-3 forms


【解决方案1】:

只是为了清理一下

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 中运行我不确定早期版本

【讨论】:

  • 数据库中的两个 ID 仍然为空。我应该更改表格上的任何内容吗?再次感谢。
  • 你应该检查你的 development.log 文件,你会在那里看到参数列表和 sql 查询
  • 如果您在问题中添加部分内容会很棒
  • 您可以使用if @group_member.save!,这样如果存在保存问题,它会引发异常。
  • 我检查了日志,发现了一些东西,我在 POST 期间收到了这条线:WARNING: Can't mass-assign protected attributes: group, member。这与错误有关吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多