> Client :: ActiveRecord_Associations_CollectionProxy的未定义方法'to_key'仅在编辑期间

时间:2018-12-21 13:44:53

标签: ruby-on-rails

我有一个带有以下代码的Rails应用程序: 我有一个带

的ClientsController
class ClientsController < ApplicationController
  def new
    #GET to /users/:user_id/client/new(.:format)
    @client = Client.new
    @client2 = Client.new
  end

  def index
    @user = User.find(params[:user_id])
    @client = @user.clients
  end

  def create
    @user = User.find(params[:user_id])
    #create client linked to this user
    @client = @user.clients.build( client_params )
    if @client.save
      flash[:success] = "Client Updated"
      redirect_to root_path
    else
      render action::new
    end
  end

  def edit
    @user = User.find(params[:user_id])
    @client = @user.clients
  end

  private 

  def client_params
    params.require(:client).permit(:clientName, :clientEmail)
  end
end

我的路线文件如下:

resources :users do
  resource :profile
  resources :clients
end

我有一个与个人资料的has_one关联和一个与客户的has_many关联。

我正在使用Devise进行身份验证。我没有单独的UsersController。

如果我将@client替换为@profile,则ClientsController中的代码可以很好地用于添加,编辑和更新配置文件。但是,与客户端执行相同操作时,代码会给出错误。

我的客户端edit.html.erb

<%= form_for @client, url: user_client_path do |f| %>
  <div class="form-group">
    <h5>Client's Name</h5>
    <%= f.text_field :clientName, class: 'form-control' %>
  </div>
  <div class="form-group">
    <h5>Client Email</h5>
    <%= f.text_field :clientEmail, class: 'form-control' %>
  </div>

  <div class="form-group">
    <%= f.submit "Save Profile", class: 'btn btn-primary' %>
  </div>
<% end %>

我收到一条错误消息

  

未定义的方法“ to_key”   客户端:: ActiveRecord_Associations_CollectionProxy

我正在dashboard / index.html.erb中这样做

<% @clients.each do |c| %>
  <%= link_to "Edit Clients", edit_user_client_path(id: c.id,user_id: current_user.id) %> 
  <br>
<% end %>

单击链接时,我得到http://localhost:3000/users/26/clients/4/edit,但随后出现错误。

1 个答案:

答案 0 :(得分:0)

您需要在控制器操作中找到一个客户端,而不是关联。应该是

def edit
  @user=User.find(params[:user_id]) 
  @client = @user.clients.find(params[:id])
end