我是铁杆新手并且坚持一件简单的事情。
我有一种向团队添加新成员的方法:
def add_member
@team = Team.find(params[:id])
@team.members << User.find(params[:user_id])
redirect_to @team
end
每个团队都有自己的作者。我希望作者将注册用户添加到他的团队中:
我的添加按钮:
= 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
但一直说,没有这样的用户。
答案 0 :(得分:0)
您应该从email_field_tag
和add_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
参数。