【问题标题】:Rails - generate a Scaffold within a NamespaceRails - 在命名空间中生成脚手架
【发布时间】:2016-04-06 07:16:22
【问题描述】:

我有一个早期项目,我试图在组织成为问题之前对其进行命名,遵循我能找到的关于命名空间的最清晰和最新的post

但它并不像我希望的那样神奇。如何在命名空间中生成一个功能性的 Scaffold?我相信这是一个多元与单一的问题。

例子:

words
  languages
  definitions

users

生成:

rails g scaffold Words/Language name:string
rails g scaffold Words/Definition name:string
rails g scaffold Word name:string language:references definition:references user:references

在上述之后,word.language 有一个例外,但word.user 没有:

irb(main)> word = Word.find(1)
  Word Load (0.3ms)  SELECT  "words".* FROM "words" WHERE "words"."id" = ? LIMIT 1  [["id", 1]]
=> #<Word id: 1, name: "Hello", language_id: 1, definition_id: 1, user_id: 1>

irb(main)> word.user
  User Load (0.7ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 1]]
=> #<User id: 1, name: "admin">

irb(main)> word.language
NameError: uninitialized constant Word::Language

Rails 生成两个模型,word.rbwords.rb

app/models/word.rb

class Word < ActiveRecord::Base
  belongs_to :language
  belongs_to :definition
  belongs_to :user
end

app/models/words.rb

module Words
  def self.table_name_prefix
    'words_'
  end
end

如何使用命名空间生成的脚手架解决单数与复数的问题?

【问题讨论】:

  • 脚手架生成器是否旨在支持命名空间?

标签: ruby-on-rails ruby ruby-on-rails-3 namespaces


【解决方案1】:

第二次尝试

在链接指南中,建议将控制器放入复数命名空间中,以允许视图嵌套文件夹结构。然而,模型应该保持单数,所以我的第二次尝试是首先在单数命名空间中生成 model,然后将 scaffold_controller--model-name= 一起传递单数模型。

生成:

rails g model Word/Language name:string
rails g scaffold_controller Words/Language name:string --model-name=Word/Language

rails g model Word/Definition body:text
rails g scaffold_controller Words/Definition name:string --model-name=Word/Definition

rails g model Word name:string language:references definition:references user:references

rails g scaffold_controller Word name:string language:references definition:references --model-name=Word

有问题的路线:

namespace :words do
  resources :definitions, :languages
end
resources :words

这次错误是undefined local variable or method 'new_word_definition_path'

这是因为根据rake routes,正确的路由是new_words_language

这让我回到了最初的问题,即如何克服这种多元化的困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2023-03-12
    • 2012-09-06
    • 2011-04-16
    相关资源
    最近更新 更多