如何使用email_field_tag向团队添加成员

时间:2015-12-05 02:48:53

标签: ruby-on-rails ruby-on-rails-4

我是铁杆新手并且坚持一件简单的事情。

我有一种向团队添加新成员的方法:

  def add_member
    @team = Team.find(params[:id])
    @team.members << User.find(params[:user_id])
    redirect_to @team
  end

每个团队都有自己的作者。我希望作者将注册用户添加到他的团队中:

add new member img

我的添加按钮:

= link_to 'Add member', add_member_team_path(@team, user_id: user.id)

因此,如果存在该电子邮件的用户,则应将其添加到 @ team.members 。 如何将 user.id email_field_tag 传递到我的链接按钮?

对不起,如果问题很愚蠢。非常感谢提前!

更新

现在代码看起来像这样:

控制器:

  def add_member_by_email
    @team = Team.find(params[:id])
    @user = User.find_by_email(params[:email])

    if @user.nil?
      render text: "No user found with that email" and return
    else
      @team.members << @user
      redirect_to @team
    end
  end

在我看来:

= email_field_tag :user_email
= link_to 'Add to team', add_member_by_email_team_path(@team, email: :user_email)

在routes.rb中:

  resources :teams do
    member do
      get :add_member_by_email
    end
  end

但一直说,没有这样的用户。

3 个答案:

答案 0 :(得分:0)

您应该从email_field_tagadd_member操作中传递电子邮件地址:

def add_member
  @team = Team.find(params[:id])
  user = User.find_by_email(params[:email])
  if !user.nil?
    @team.members << user
    @team.save
    redirect_to @team
  else
    # Cannot find the user with the email address, do something here based on your design
  end
end

答案 1 :(得分:0)

在您的视图中,使用表单助手,它将呈现html表单标记:

= form_for User.new, url: add_member_path(@team) do |f|
  = f.text_field :email
  = f.submit "Add new member"

在控制器中,您可以像这样访问用户电子邮件:

params[:user][:email]

注意:请原谅我的帖子中的任何拼写错误或语法错误,因为我是通过移动应用程序写的。

答案 2 :(得分:-1)

您可能希望为此创建一个新路径(而不仅仅是将其绑定到现有的add_member路径),例如:

def add_member_by_email
  @team = Team.find(params[:id])
  @user = User.find_by_email(params[:user_email])

  if @user.nil?
    render :text => "No user found with that email" and return
  end

  @team.members << @user
  redirect_to @team
end

并更新您的表单:

= link_to 'Add member', add_member_by_email_team_path(@team)

确保电子邮件文本字段提供user_email参数。