正确创建用户和组之间的加入操作 [英] creating a join action between user and group correctly
问题描述
我在尝试根据用户在会员表单中输入的名称为用户创建会员时遇到问题 - new.html.erb.
user.rb
has_many :memberships, :dependent =>:破坏has_many :groups, :through =>:会员
membership.rb
class Membership
group.rb
has_many :memberships, :dependent =>:破坏has_many :users, :through =>:会员
会员控制者
def 创建@group = Group.find_by_name(:group)@membership = current_user.memberships.build(:group_id => @group.group_id)如果@membership.saveflash[:notice] = "您已加入此群组."重定向到:返回别的flash[:error] = "无法加入."重定向到:返回结尾结尾
会员资格 - _form.html.erb
<%= form_for(@membership) do |f|%>...#错误验证...<div class="field"><%= f.label:group %><br/><%= f.text_field :group %>
<div class="actions"><%= f.submit %>
<%结束%>
我想要它做的是找到输入的组(如果存在),并相应地在成员资格表中创建表条目.只是不确定我在做什么是在正确的轨道上.有什么建议吗?
你的代码现在不工作的原因是因为这一行:
@group = Group.find_by_name(:group)
应该是这样的(我不记得很抱歉)
@group = Group.find_by_name(params[:membership][:group])
错误在下一行被调用,因为 @group
是 nil
.
但无论如何,您应该使用虚拟属性或其他东西来处理模型中的这种类型的逻辑.
membership.rb
def group_nameif self.group@group_name ||= self.group.name结尾结尾def group_name=(group_name)@group_name = group_nameself.group = Group.find_by_name(@group_name)结尾
表格
<%= f.label :group_name, "Group" %><br/><%= f.text_field :group_name %>
控制器
def 创建@membership = current_user.memberships.build(params[:membership])如果@membership.saveflash[:notice] = "您已加入此群组."重定向到:返回别的flash[:error] = "无法加入."重定向到:返回结尾结尾
I have a problem when trying to create a membership for users based on the name they input into the membership form - new.html.erb.
user.rb
has_many :memberships, :dependent => :destroy
has_many :groups, :through => :memberships
membership.rb
class Membership < ActiveRecord::Base
attr_accessible :user_id, :group_id
belongs_to :user
belongs_to :group
end
group.rb
has_many :memberships, :dependent => :destroy
has_many :users, :through => :memberships
membership controller
def create
@group = Group.find_by_name(:group)
@membership = current_user.memberships.build(:group_id => @group.group_id)
if @membership.save
flash[:notice] = "You have joined this group."
redirect_to :back
else
flash[:error] = "Unable to join."
redirect_to :back
end
end
membership - _form.html.erb
<%= form_for(@membership) do |f| %>
...
#error validation
...
<div class="field">
<%= f.label :group %><br />
<%= f.text_field :group %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
What I want it to do is find the group inputted if it exists, and create the table entry in the memberships table accordingly. Just not sure if what I'm doing is on the right track. Any suggestions?
The reason your code isn't working now is because of this line:
@group = Group.find_by_name(:group)
it should be something like (I don't remember exactly sorry)
@group = Group.find_by_name(params[:membership][:group])
The error is getting called on the next line because @group
is nil
.
But you should probably handle that type of logic in the model anyway with a virtual attribute or something.
membership.rb
def group_name
if self.group
@group_name ||= self.group.name
end
end
def group_name=(group_name)
@group_name = group_name
self.group = Group.find_by_name(@group_name)
end
form
<div class="field">
<%= f.label :group_name, "Group" %><br />
<%= f.text_field :group_name %>
</div>
controller
def create
@membership = current_user.memberships.build(params[:membership])
if @membership.save
flash[:notice] = "You have joined this group."
redirect_to :back
else
flash[:error] = "Unable to join."
redirect_to :back
end
end
这篇关于正确创建用户和组之间的加入操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!