我有一个带有帐户模型和帐户管理员(用户)的应用。
我希望客户经理能够通过输入他们的电子邮件将其他用户添加到该帐户。
应将新帐户管理员的帐户ID添加到新用户的记录中。
我的模型看起来像
class Account < ActiveRecord::Base
has_many users
...
end
class User < ActiveRecord::Base
belongs_to account
...
end
在控制台中,它相当简单。
u = User.find(2)
u.update_attributes(account_id: 1)
但我不确定如何在网站上执行此操作。
我有以下部分呈现罚款,但当我在框中发送电子邮件时没有任何反应。
我收到消息,未添加用户。
<h4>Add User</h4>
<div class = "row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(:add_user, url: add_users_path) do |f| %>
<%= f.hidden_field @account = Account.find(params[:id]) %>
<%= f.label :email %>
<%= f.email_field :email, class:'form-control' %>
<%= f.submit "Submit", class: "btn btn-primary" %>
<% end %>
</div>
</div>
我不一定要/需要路由到另一个页面,例如&#34; url:add_users_path&#34;但如果没有那一行,代码就会中断并且不会渲染。
我将此添加到user.rb
def add_user_to_account
update_attribute(:account_id)
end
我也创建了这个控制器
class AddUsersController < ApplicationController
before_action :get_user, only: [:edit, :update]
def new
end
def edit
end
def create
@user = User.find_by(email: params[:email])
if @user
@user.add_user_to_account
flash[:info] = "Added User to Account"
redirect_to accounts_url
else
flash[:danger] = "User NOT Added"
redirect_to accounts_url
end
end
def update
if params[:user][:account_id].empty?
@user.errors.add(:account_id, "can't be empty")
render 'edit'
elsif @user.update_attributes(user_params)
log_in @user
flash[:success] = "Account Updated"
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:account_id, :user_id)
end
def get_user
@user = User.find_by(email: params[:email])
end
end
我是否在正确的轨道上?有一个更好的方法吗?
更新:添加了架构
create_table "accounts", force: :cascade do |t|
t.string "name"
t.integer "account_manager_id"
t.integer "subscription_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "users", force: :cascade do |t|
t.string "name"
t.string "password_digest", null: false
t.string "remember_digest"
t.string "email", null: false
t.string "activation_digest"
t.boolean "activated"
t.datetime "activated_at"
t.string "reset_digest"
t.datetime "reset_sent_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "access_granted"
t.boolean "requested_access"
t.string "slug"
t.integer "account_id"
end
答案 0 :(得分:1)
我认为你错了。
您使用params[:email]
代替params[:add_user][:email]
通过电子邮件找到用户
在您的控制器中
class UsersController < ApplicationController
...
def add_users
user = User.find_by(email: params[:add_user][:email])
if user
user.add_user_to_account
...
else
...
end
end
end