我试图制作一个示例应用来了解命名空间/范围/模块
通常情况下,我会使用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
答案 0 :(得分:1)
@user.addresses
是一个集合,您将(实例)方法cacity
发送到集合,该集合在错误状态下不响应它。
@user.addresses.first.cacity
可行。
您可以将关系限制为has_one
:
has_one :address #...
这将允许您使用以下内容:
@user.address.cacity