Tag: 名称空间

Rails形成三个模型和命名空间

很长一段时间,我一直反对这个。 在Rails 2.3.2,Ruby 1.9.1上。 尝试使用一个表单来创建具有这些关系的三个对象: class Person has_one :goat end class Goat belongs_to :person has_many :kids end class Goat::Kid belongs_to :goat end 这是架构的摘要: Person first_name last_name Goat name color Goat::Kid nickname age 我希望我的#create动作能够使用指定的关联来实例化所有三个模型的新实例。 然而,虽然看起来我的params散列正在传递给控制器​​(基于浏览器中的回溯日志), Goat::Kid对象没有收集参数。 irb(irb会话只是我想要完成的伪代表,所以如果它不调用#save!或任何其他必需品,它并不是真正意义上的正确。我试图通过浏览器/网络表单。) a = Person.new :first_name => ‘Leopold’, :last_name => ‘Bloom’ b = Goat.new :name => ‘Billy’, :color => ‘white’ c […]

添加带有命名空间admin的控制器作为子文件夹

我在ROR 3.2上有一个简单的cms。 使用此文件夹方案: app | controllers |我的控制器 但我想要一个“管理员”部分,我也可以有一些控制器。 所以我创造了 rails生成控制器管理员/用户 app | 控制器|管理员和我的管理控制器 所以我的文件是: users_controller.rb class Admin::UsersController “sou o index!”) end def list render(:text => “sou o list”) end end 我的路线上有: namespace :admin do resources :users end match ‘:controller(/:action(/:id))(.:format)’ 我是rails的新手,我无法找到解决方案。 无处不在。 问题是我试着去做: HTTP://本地主机:3000 /管理/用户/列表 我得到这个错误: 未知操作无法为Admin :: UsersController找到操作“show”

Rails 3:获取当前命名空间?

使用方法:layout_for_namespace我根据我是在前端还是后端设置我的应用程序的布局,因为后端使用命名空间“admin”。 我找不到一个很好的方法来找出我是哪个命名空间,我发现的唯一方法是从params [:controller]解析字符串。 当然这很容易,似乎是安全的,并且运行良好。 但我只是想知道是否有更好的,准备好的方法来做到这一点。 有人知道吗? 目前我只是使用以下方法: def is_backend_namespace? params[:controller].index(“admin/”) == 0 end 提前致谢 阿恩

Rails url_for和命名空间模型

在Rails中,是否可以在模块中命名模型并仍然从url_for获得正确的行为? 例如,在这里, url_for按预期工作: # app/models/user.rb class User < ActiveRecord::Base end # config/routes.rb resources :users # app/views/users/index.html.haml = url_for(@user) # /users/1 将User模型放入模块后, url_for抱怨未定义的方法m_user_path : # app/models/m/user.rb module M class User < ActiveRecord::Base end end # config/routes.rb resources :users # app/views/users/index.html.haml = url_for(@user) # undefined method 'm_users_path' 是否可以让url_for忽略M::User的模块并返回url_for(@user)而不是m_user_path ? UPDATE 因此,经过近5年的时间,这是解决方案,感谢esad。 这已在Rails 4.2中测试过。 # app/models/m/user.rb module M […]

使用命名空间类时解决“NameError未初始化常量”的麻烦?

我正在使用rails v3.2.2。 我有两个类如下: # app/models/article/category/article_relationship.rb class Article::Category::ArticleRelationship < ActiveRecord::Base … end # app/models/comment/category/article_relationship.rb class Comment::Category::ArticleRelationship < ActiveRecord::Base … end # app/models/article/category.rb class Article::Category < ActiveRecord::Base … end # app/models/article.rb class Article < ActiveRecord::Base … end 如果在我的视图文件中我说 ::Article::Category::ArticleRelationship # or Article::Category::ArticleRelationship 我收到以下错误: NameError uninitialized constant Category::ArticleRelationship 我该如何解决这个问题? UPDATE 当我同时在同一个文件中声明多个命名空间类时,我发现问题“大部分”发生,例如: ::Article::Category::ArticleRelationship ::Article::Category # or ::Comment::Category::ArticleRelationship ::Article::Category # […]

rails中的模型命名空间问题

我在Rails 3.1中遇到了名称空间问题。 我有一节课,我们称之为。 #/app/models/a.rb class a #some methods def self.method_from_a #does things end end 但是我还有另一个在不同命名空间中具有相同名称的类。 #/app/models/b/a.rb class b::a def method return a.method_from_a end end 当我调用b :: a.method但我得到: NameError: uninitialized constant b::a::a 我相信这是一个简单的解决方案,我只是错过了它。

Ruby#等效的C#’using’语句

在过去的几个月里我一直在使用Ruby,但是我还没想到的一件事是using语句的Ruby等价的C#(和其他语言)。 我一直在使用require语句声明我对Gems的依赖,但是我变得懒惰,并且宁愿不完全限定我经常使用的类名和模块(名称空间)名称。 当然这是可能的,对吧? 我一定不能使用正确的术语,因为谷歌没有给我任何有用的东西。

从模块中访问包含类的命名空间

我正在研究一个模块,除其他外,它将为你混合它的类添加一些通用的’finder’类型function。 问题:出于方便和美观的原因,我想在类之外包含一些function,与类本身在同一范围内。 例如: class User include MyMagicMixin end # Should automagically enable: User.name(‘Bob’) # Returns first user named Bob Users.name(‘Bob’) # Returns ALL users named Bob User(5) # Returns the user with an ID of 5 Users # Returns all users 我可以在这些方法中做function,没问题。 案例1( User.name(‘Bob’) )很简单。 但是,案例2-4需要能够在User之外创建新的类和方法。 Module.included方法允许我访问该类,但不允许访问其包含的范围。 在Class和Module上没有简单的“父”类型方法。 (对于命名空间,我的意思是,不是超类,也不是嵌套模块。) 我能想到的最好方法是在类的#name上进行一些字符串解析,以打破其命名空间,然后将字符串转换回常量。 但这看起来很笨拙,鉴于这是Ruby,我觉得应该有更优雅的方式。 有没有人有想法? 或者我只是为了自己的利益而过于聪明?

将Ruby gem加载到用户定义的命名空间中

给定一个定义与我编写的代码冲突的顶级类的gem,是否可以以这样的方式要求gem,使其所有类都分组在我可以定义的模块中? 例如,如果unsafe_gem定义了一个类: class Word # … some code end 我需要这样的东西: class Word # My word class. end module SafeContainer # This obviously doesn’t work # (ie the gem still defines ::Word). require ‘unsafe_gem’ end 这样我就可以区分: Word.new # => The class I defined. SafeContainer::Word.new # => The class defined by the gem. 一些进一步的细节:我的代码(例如’Word’类)已经包装在它自己的命名空间中。 但是,我希望能够为用户提供启用“语法糖”forms的选项,这使得某些类可以在顶级命名空间下直接访问。 但是,这会与我正在使用的某个gem创建一个名称冲突,它定义了一个顶级类。 目前提出的解决方案都不起作用,因为gem实际上依赖于其全球定义的类; […]

2 activeadmin的命名空间

我正在尝试在过去的4个小时内安装带有两个名称空间的activeadmin,但我没有运气。 我想要两个命名空间。 “admin”和“admin_unit”。 我会假设我有app / admin和app / admin_unit目录。 对于admin命名空间,我想使用默认的devise身份validation,对于“admin_unit”命名空间,我有一个我需要使用的current_user方法。 我已经尝试使用命名空间包装active_admin配置中的所有配置,并且我尝试手动创建文件等,但每次我遇到一些问题。 Activeadmin在过去的一年里发生了很大的变化,我很害怕我见过的一半指令已经过时了。 而且没有一个是完整的。 文档仅部分位于命名空间。 有没有人有从开始到结束安装这两个命名空间的一步一步的说明? 我非常感谢你的帮助! 编辑 当我去启动服务器(或在这种情况下我试图耙路线)时,我收到此错误: Expected /app/active_admin/admin/dashboard.rb to define Admin::Dashboard (LoadError) dashboard.rb中有这个: ActiveAdmin.register_page “My Page”, :namespace => :admin do content do para “Hello World” end end 我也试过没有命名空间: ActiveAdmin.register_page “My Page” do content do para “Hello World” end end 仅供参考我添加了一个“active_admin”目录,并将两个命名空间目录放在那里。 我将两者都添加到加载路径中(感谢您)。 此错误是否与新的仪表板页面有关? 我将研究下一步的工作方式。 多谢你们! […]