Ruby on rails 轨道&x2B;设计:用户注册中未定义的局部变量#编辑 更新:

Ruby on rails 轨道&x2B;设计:用户注册中未定义的局部变量#编辑 更新:,ruby-on-rails,ruby,ruby-on-rails-4,devise,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,我需要将我的控制器代码放在上面super,就像这样,然后我可以访问视图中的@company实例变量: 用户注册控制器: class UserRegistrationController < Devise::RegistrationsController before_action :configure_permitted_parameters skip_before_filter :load_customer_access, only: [:new, :create] d

我需要将我的控制器代码放在上面super,就像这样,然后我可以访问视图中的@company实例变量:

用户注册控制器:

class UserRegistrationController < Devise::RegistrationsController
  before_action :configure_permitted_parameters
  skip_before_filter :load_customer_access, only: [:new, :create]  

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
  end

  def edit
    @customer = current_user.customer
    @company = Company.find_by_domain(User.get_domain(@customer.email))          
    super          
  end
end
   ...
   def self.get_domain(email_address)
     email_address.gsub(/.+@([^.]+.+)/, '\1')
   end

  def confirm!
    current_customer = Customer.where(email: self.email).first        
    super
  end

  def ensure_has_customer
    customer = self.customer
    company = Company.find_by_domain(User.get_domain(self.email))
  end
  ...
class UserRegistrationController < Devise::RegistrationsController
  before_action :configure_permitted_parameters
  skip_before_filter :load_customer_access, only: [:new, :create]  

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
  end

  def edit
    super
      @customer = current_user.customer
      @company = Company.find_by_domain(User.get_domain(@customer.email))
      puts "HAPPY CUSTOMER"
      puts @customer.email    
      puts "HAPPY COMPANY"
      puts @company.id // See above screenshot for logs
  end
end
match "company/:company_id/edit_users" => 'company#edit_users', via: [:get], :as => :edit_company_users
<%= form_for(current_user, :as => :user, :url => registration_path(:user), :html => { :method => :put }) do |f| %>
    <div>
      <h1 class="login-header">My Account</h1>
    </div>
    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">
          <%= f.text_field :first_name, :class => 'form-control custom-form-control', :placeholder => 'First name' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.text_field :last_name, :class => 'form-control custom-form-control', :placeholder => 'Last name' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.email_field :email, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'Email' %>
        </div>
      </div>
    </div>


    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">             
          <%= f.password_field :password, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'New password' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.password_field :password_confirmation, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'New password confirmation' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">           
          <%= f.password_field :current_password, :class => 'form-control custom-form-control', :placeholder => 'Current password' %>
        </div>
      </div>
    </div>
    <br>
    <div class="form-actions">
      <button type="submit" class="btn-account-primary">Update Account</button>
    </div>
<% end %>
<% if @customerAccess.admin_role %>
  <hr>
  <%= link_to 'Manage Users', edit_company_users_path(@company), :class => 'btn btn-sm btn-default' %><br>
<% end %>
class CompanyController < ApplicationController    

  def index
    @companies = Company.all
    respond_to do |format|
      format.html
      format.json { render json: @companies }
    end
  end   

  def edit_users
    @company = Company.find(params[:company_id])
    @company_name = @company.name
    @domain = @company.domain
    @find_domain = "%" + @domain + "%"
    @users = User.find(:all, :conditions => ["email LIKE ?", @find_domain])
  end
end
<div class="col-md-12">    
  <div class="row">
    <div class="col-md-2"></div>
      <div class="col-md-8">
        <div class="page-header">
          <h1>Manage Companies</h1>
        </div>
        <table class = "table table-striped table-bordered">
          <tr>
            <th>Company Name</th>
            <th>Domain</th>
            <th>Action</th>
          </tr>

          <% @companies.each do |company| %>
            <tr>
              <td><%= company.name %></td>
              <td><%= company.domain %></td>
              <td>
                <%= link_to 'Manage Company Access', edit_company_path(company), :class => 'btn btn-sm btn-default' %>
                <%= link_to 'Manage Applications', edit_company_applications_path(company), :class => 'btn btn-sm btn-default' %>
                <%= link_to 'Manage Users', edit_company_users_path(company), :class => 'btn btn-sm btn-default' %><br>
              </td>
            </tr>
          <% end %>
        </table>
      </div>      
    </div>
  </div>
用户注册控制器:

class UserRegistrationController < Devise::RegistrationsController
  before_action :configure_permitted_parameters
  skip_before_filter :load_customer_access, only: [:new, :create]  

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
  end

  def edit
    @customer = current_user.customer
    @company = Company.find_by_domain(User.get_domain(@customer.email))          
    super          
  end
end
   ...
   def self.get_domain(email_address)
     email_address.gsub(/.+@([^.]+.+)/, '\1')
   end

  def confirm!
    current_customer = Customer.where(email: self.email).first        
    super
  end

  def ensure_has_customer
    customer = self.customer
    company = Company.find_by_domain(User.get_domain(self.email))
  end
  ...
class UserRegistrationController < Devise::RegistrationsController
  before_action :configure_permitted_parameters
  skip_before_filter :load_customer_access, only: [:new, :create]  

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
  end

  def edit
    super
      @customer = current_user.customer
      @company = Company.find_by_domain(User.get_domain(@customer.email))
      puts "HAPPY CUSTOMER"
      puts @customer.email    
      puts "HAPPY COMPANY"
      puts @company.id // See above screenshot for logs
  end
end
match "company/:company_id/edit_users" => 'company#edit_users', via: [:get], :as => :edit_company_users
<%= form_for(current_user, :as => :user, :url => registration_path(:user), :html => { :method => :put }) do |f| %>
    <div>
      <h1 class="login-header">My Account</h1>
    </div>
    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">
          <%= f.text_field :first_name, :class => 'form-control custom-form-control', :placeholder => 'First name' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.text_field :last_name, :class => 'form-control custom-form-control', :placeholder => 'Last name' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.email_field :email, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'Email' %>
        </div>
      </div>
    </div>


    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">             
          <%= f.password_field :password, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'New password' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.password_field :password_confirmation, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'New password confirmation' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">           
          <%= f.password_field :current_password, :class => 'form-control custom-form-control', :placeholder => 'Current password' %>
        </div>
      </div>
    </div>
    <br>
    <div class="form-actions">
      <button type="submit" class="btn-account-primary">Update Account</button>
    </div>
<% end %>
<% if @customerAccess.admin_role %>
  <hr>
  <%= link_to 'Manage Users', edit_company_users_path(@company), :class => 'btn btn-sm btn-default' %><br>
<% end %>
class CompanyController < ApplicationController    

  def index
    @companies = Company.all
    respond_to do |format|
      format.html
      format.json { render json: @companies }
    end
  end   

  def edit_users
    @company = Company.find(params[:company_id])
    @company_name = @company.name
    @domain = @company.domain
    @find_domain = "%" + @domain + "%"
    @users = User.find(:all, :conditions => ["email LIKE ?", @find_domain])
  end
end
<div class="col-md-12">    
  <div class="row">
    <div class="col-md-2"></div>
      <div class="col-md-8">
        <div class="page-header">
          <h1>Manage Companies</h1>
        </div>
        <table class = "table table-striped table-bordered">
          <tr>
            <th>Company Name</th>
            <th>Domain</th>
            <th>Action</th>
          </tr>

          <% @companies.each do |company| %>
            <tr>
              <td><%= company.name %></td>
              <td><%= company.domain %></td>
              <td>
                <%= link_to 'Manage Company Access', edit_company_path(company), :class => 'btn btn-sm btn-default' %>
                <%= link_to 'Manage Applications', edit_company_applications_path(company), :class => 'btn btn-sm btn-default' %>
                <%= link_to 'Manage Users', edit_company_users_path(company), :class => 'btn btn-sm btn-default' %><br>
              </td>
            </tr>
          <% end %>
        </table>
      </div>      
    </div>
  </div>
\u edit\u account.html.erb:

class UserRegistrationController < Devise::RegistrationsController
  before_action :configure_permitted_parameters
  skip_before_filter :load_customer_access, only: [:new, :create]  

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
  end

  def edit
    @customer = current_user.customer
    @company = Company.find_by_domain(User.get_domain(@customer.email))          
    super          
  end
end
   ...
   def self.get_domain(email_address)
     email_address.gsub(/.+@([^.]+.+)/, '\1')
   end

  def confirm!
    current_customer = Customer.where(email: self.email).first        
    super
  end

  def ensure_has_customer
    customer = self.customer
    company = Company.find_by_domain(User.get_domain(self.email))
  end
  ...
class UserRegistrationController < Devise::RegistrationsController
  before_action :configure_permitted_parameters
  skip_before_filter :load_customer_access, only: [:new, :create]  

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
  end

  def edit
    super
      @customer = current_user.customer
      @company = Company.find_by_domain(User.get_domain(@customer.email))
      puts "HAPPY CUSTOMER"
      puts @customer.email    
      puts "HAPPY COMPANY"
      puts @company.id // See above screenshot for logs
  end
end
match "company/:company_id/edit_users" => 'company#edit_users', via: [:get], :as => :edit_company_users
<%= form_for(current_user, :as => :user, :url => registration_path(:user), :html => { :method => :put }) do |f| %>
    <div>
      <h1 class="login-header">My Account</h1>
    </div>
    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">
          <%= f.text_field :first_name, :class => 'form-control custom-form-control', :placeholder => 'First name' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.text_field :last_name, :class => 'form-control custom-form-control', :placeholder => 'Last name' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.email_field :email, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'Email' %>
        </div>
      </div>
    </div>


    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">             
          <%= f.password_field :password, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'New password' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.password_field :password_confirmation, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'New password confirmation' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">           
          <%= f.password_field :current_password, :class => 'form-control custom-form-control', :placeholder => 'Current password' %>
        </div>
      </div>
    </div>
    <br>
    <div class="form-actions">
      <button type="submit" class="btn-account-primary">Update Account</button>
    </div>
<% end %>
<% if @customerAccess.admin_role %>
  <hr>
  <%= link_to 'Manage Users', edit_company_users_path(@company), :class => 'btn btn-sm btn-default' %><br>
<% end %>
class CompanyController < ApplicationController    

  def index
    @companies = Company.all
    respond_to do |format|
      format.html
      format.json { render json: @companies }
    end
  end   

  def edit_users
    @company = Company.find(params[:company_id])
    @company_name = @company.name
    @domain = @company.domain
    @find_domain = "%" + @domain + "%"
    @users = User.find(:all, :conditions => ["email LIKE ?", @find_domain])
  end
end
<div class="col-md-12">    
  <div class="row">
    <div class="col-md-2"></div>
      <div class="col-md-8">
        <div class="page-header">
          <h1>Manage Companies</h1>
        </div>
        <table class = "table table-striped table-bordered">
          <tr>
            <th>Company Name</th>
            <th>Domain</th>
            <th>Action</th>
          </tr>

          <% @companies.each do |company| %>
            <tr>
              <td><%= company.name %></td>
              <td><%= company.domain %></td>
              <td>
                <%= link_to 'Manage Company Access', edit_company_path(company), :class => 'btn btn-sm btn-default' %>
                <%= link_to 'Manage Applications', edit_company_applications_path(company), :class => 'btn btn-sm btn-default' %>
                <%= link_to 'Manage Users', edit_company_users_path(company), :class => 'btn btn-sm btn-default' %><br>
              </td>
            </tr>
          <% end %>
        </table>
      </div>      
    </div>
  </div>
公司索引视图:

class UserRegistrationController < Devise::RegistrationsController
  before_action :configure_permitted_parameters
  skip_before_filter :load_customer_access, only: [:new, :create]  

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
  end

  def edit
    @customer = current_user.customer
    @company = Company.find_by_domain(User.get_domain(@customer.email))          
    super          
  end
end
   ...
   def self.get_domain(email_address)
     email_address.gsub(/.+@([^.]+.+)/, '\1')
   end

  def confirm!
    current_customer = Customer.where(email: self.email).first        
    super
  end

  def ensure_has_customer
    customer = self.customer
    company = Company.find_by_domain(User.get_domain(self.email))
  end
  ...
class UserRegistrationController < Devise::RegistrationsController
  before_action :configure_permitted_parameters
  skip_before_filter :load_customer_access, only: [:new, :create]  

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :current_password, :password, :password_confirmation, :email) }
  end

  def edit
    super
      @customer = current_user.customer
      @company = Company.find_by_domain(User.get_domain(@customer.email))
      puts "HAPPY CUSTOMER"
      puts @customer.email    
      puts "HAPPY COMPANY"
      puts @company.id // See above screenshot for logs
  end
end
match "company/:company_id/edit_users" => 'company#edit_users', via: [:get], :as => :edit_company_users
<%= form_for(current_user, :as => :user, :url => registration_path(:user), :html => { :method => :put }) do |f| %>
    <div>
      <h1 class="login-header">My Account</h1>
    </div>
    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">
          <%= f.text_field :first_name, :class => 'form-control custom-form-control', :placeholder => 'First name' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.text_field :last_name, :class => 'form-control custom-form-control', :placeholder => 'Last name' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.email_field :email, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'Email' %>
        </div>
      </div>
    </div>


    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">             
          <%= f.password_field :password, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'New password' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">              
          <%= f.password_field :password_confirmation, :autocomplete => "off", :class => 'form-control custom-form-control', :placeholder => 'New password confirmation' %>
        </div>
      </div>
    </div>

    <div class="control-group">
      <div class="controls">
        <div class="input-group col-centered input-group-lg">           
          <%= f.password_field :current_password, :class => 'form-control custom-form-control', :placeholder => 'Current password' %>
        </div>
      </div>
    </div>
    <br>
    <div class="form-actions">
      <button type="submit" class="btn-account-primary">Update Account</button>
    </div>
<% end %>
<% if @customerAccess.admin_role %>
  <hr>
  <%= link_to 'Manage Users', edit_company_users_path(@company), :class => 'btn btn-sm btn-default' %><br>
<% end %>
class CompanyController < ApplicationController    

  def index
    @companies = Company.all
    respond_to do |format|
      format.html
      format.json { render json: @companies }
    end
  end   

  def edit_users
    @company = Company.find(params[:company_id])
    @company_name = @company.name
    @domain = @company.domain
    @find_domain = "%" + @domain + "%"
    @users = User.find(:all, :conditions => ["email LIKE ?", @find_domain])
  end
end
<div class="col-md-12">    
  <div class="row">
    <div class="col-md-2"></div>
      <div class="col-md-8">
        <div class="page-header">
          <h1>Manage Companies</h1>
        </div>
        <table class = "table table-striped table-bordered">
          <tr>
            <th>Company Name</th>
            <th>Domain</th>
            <th>Action</th>
          </tr>

          <% @companies.each do |company| %>
            <tr>
              <td><%= company.name %></td>
              <td><%= company.domain %></td>
              <td>
                <%= link_to 'Manage Company Access', edit_company_path(company), :class => 'btn btn-sm btn-default' %>
                <%= link_to 'Manage Applications', edit_company_applications_path(company), :class => 'btn btn-sm btn-default' %>
                <%= link_to 'Manage Users', edit_company_users_path(company), :class => 'btn btn-sm btn-default' %><br>
              </td>
            </tr>
          <% end %>
        </table>
      </div>      
    </div>
  </div>

管理公司
公司名称
领域
行动
'btn btn sm btn默认值'%>
'btn btn sm btn默认值'%>
'btn btn sm btn默认值'>
有趣的是,当我在视图中执行
操作时,不会显示公司名称(尽管ID为2,名称为“Ryan Drake”),并在视图中显示ok。当我执行
时,它抛出“nil:class的未定义方法'id'


任何关于以最简单的方式从Edit Account Deviate视图访问公司ID的指导,我都可以将其作为一个参数传递并点击该方法,这将是非常棒的

在您显示的代码中,有一个end和一个if,我认为您可能在错误行之前关闭了“each”循环,因此找不到“company”变量

编辑:

我看到两个潜在问题:

  • 它肯定是
    编辑公司用户路径(@company)
    中的
    @company
    。如果 它不起作用,是否显示相同的错误?请出示

  • 我想你可能在化名里设计路线 “编辑公司用户路径”,但我不知道你是如何组织的 你的资源。如果您将公司嵌套在用户下,则 默认的路由如下 编辑公司用户路径(@公司,当前用户)。运行
    rake路由
    if 你得到一个路由错误


  • 粘贴您的_edit_account.html.erb查看代码从您调用的部分_edit_帐户的位置?从哪个文件呈现该部分?designe/edit.html.erb
    您是否尝试过此
    编辑公司用户路径(@company)
    这里有两种情况:一种是表单,它需要一个结束标记,另一种是基于访问的条件:
    。除非我错过了什么,否则我不会关闭每个循环?请更清楚地指出。@RyanDrake请粘贴完整的公司索引视图,以便我们可以看到问题。完成!好了:)嘿,普西,好吧,我刚刚更新了它,因为我现在得到了一个新的错误。请看编辑后的屏幕截图:)我也添加了我日志的屏幕截图,以便看到它正在打印@company ID。