我有一个带有以下代码的Rails应用程序: 我有一个带
的ClientsControllerclass 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,但随后出现错误。
答案 0 :(得分:0)
您需要在控制器操作中找到一个客户端,而不是关联。应该是
def edit
@user=User.find(params[:user_id])
@client = @user.clients.find(params[:id])
end