Неопределенный метод to_key для> Client :: ActiveRecord_Associations_CollectionProxy только во время редактирования - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть приложение 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.

Код в ClientsController отлично работает для добавления, редактирования и обновления профиля, если я заменю @client на @profile.Но код выдает ошибку при выполнении того же действия с клиентами.

Мой 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 'для Client :: 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 голосов
/ 21 декабря 2018

Вам нужно найти одного клиента в действии контроллера, а не ассоциацию.Это должно быть

def edit
  @user=User.find(params[:user_id]) 
  @client = @user.clients.find(params[:id])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...