设计当前用户无法获取嵌套数据以便在视图中显示

时间:2015-10-22 18:17:36

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我试图制作一个示例应用来了解命名空间/范围/模块

通常情况下,我会使用current_user帮助程序,但我将Client :: Addresses嵌套在后面,并想抓住用户的城市并将其显示在他们的编辑页面上(设计注册/编辑屏幕)

 <%= current_user.?? %>

使用以下行。我还添加了inverse_of,因为我理解它也会扭转这种关系,但是无济于事。

<%= @user.addresses.cacity %>

我认为这非常接近@ user.id有效,但添加了其余的错误读取。看起来我也处理了强大的障碍,但不确定。我这样做是为了练习命名空间:范围/模块:

 undefined method `cacity' for #<ActiveRecord::Associations::CollectionProxy []>

做一些像这样的事情会很棒。

<%= current_user.addresses.cacity %>

这里有一些关于我目前所获得的信息,请告诉我是否需要其他信息。

的routes.rb

Rails.application.routes.draw do

  namespace :client do
    resources :subscriptions
  end
    # Security Devise Setup
    devise_for :admins
    devise_for :users

    # Main Pages
    root 'website/page#index'

    # Client Sections
    resources :users do
        scope module: "client" do
            root :to => 'dashboard#index'
            resources :addresses
        end
    end

    namespace :admin do
        root :to => 'panel#index'
    end

end

user.rb

class User < ActiveRecord::Base
    include Gravtastic
    gravtastic

    # Devise Settings
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

    # Model Relationships
    has_many :addresses, :inverse_of => :user, class_name: 'Client::Address'

end

的客户机/ address.rb

class Client::Address < ActiveRecord::Base
  belongs_to :user, :inverse_of => :addresses
end

1 个答案:

答案 0 :(得分:1)

@user.addresses

是一个集合,您将(实例)方法cacity发送到集合,该集合在错误状态下不响应它。

@user.addresses.first.cacity可行。

您可以将关系限制为has_one

has_one :address #...

这将允许您使用以下内容:

@user.address.cacity