正确创建用户和组之间的加入操作 [英] creating a join action between user and group correctly

查看:30
本文介绍了正确创建用户和组之间的加入操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在尝试根据用户在会员表单中输入的名称为用户创建会员时遇到问题 - 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])

错误在下一行被调用,因为 @groupnil.

但无论如何,您应该使用虚拟属性或其他东西来处理模型中的这种类型的逻辑.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆