轨道:关联和参考模型



背景:我有两个模型User(设计模型(和Client。 我设置了关联,以便Client belongs_to :userUser has_one :client. 我已经设置了我的数据库,使客户表具有user_id属性

问题:在我的导航栏中,一旦用户登录,我希望他们能够访问由Client模型表示的"配置文件",但是我似乎无法通过user_params访问正确的客户端。 例如<%= link_to "My Profile", client_path(@user) %>

这会导致错误No route matches {:action=>"show", :controller=>"clients", :id=>nil} missing required keys: [:id]即使 :id 应该可用,因为用户已登录。

我已经编辑了设计sessions_controller以包含:

def configure_sign_in_params
  devise_parameter_sanitizer.permit(:sign_up) do |user_params|
    user_params.permit( :email, :password, :id)
  end
end

。但仍然没有运气。 我有一种感觉,我错过了一些基本的东西,我只是需要一些帮助。

我缺少一些基本的东西

你不需要@user,它需要current_user

<%= link_to "Profile", client_path(current_user) if user_signed_in? %>

我们使用类似的模式(User has_one Profile(;我们做了一个singular resource,它否定了传递对象的需要:

#app/models/user.rb
class User < ActiveRecord::Base
  has_one :client
  accepts_nested_attributes_for :client
end
#config/routes.rb
resource :profile, only: [:show, :update] #-> url.com/profile
#app/controllers/profile_controller.rb
class ProfileController < ApplicationController
  def update
    current_user.update user_params
  end
  private
  def user_params
    params.require(:user).permit(client_attributes: [:x, :y, :z])
  end
end
#app/views/profile/show.html.erb
<%= form_for current_user do |f| %>
  <%= f.fields_for :client do |c| %>
    <%= c.text_field :x %>
  <% end %>
  <%= f.submit %>
<% end %>

这将允许您将请求发送到... <%= link_to "Profile", profile_path %> .

由于您只允许每个用户的profile视图,因此您将能够为其调用current_user对象。

相关内容

  • 没有找到相关文章

最新更新