【发布时间】:2014-08-08 14:06:20
【问题描述】:
我当前的应用程序结构如下:
一个示例控制器如下所示:
class Api::V1::RegisterController < Api::V1::ApiController
def create
@user = ::V1::User.new(user_params)
@user.email_address = params[:email_address]
@user.age_verification = params[:age_verification]
@user.remote_addr = request.env['REMOTE_ADDR']
@user.web_browser = browser.name.to_s + "(" + browser.version.to_s + ")"
@user.operating_system = browser.platform.to_s
if @user.save
head status: 201
else
render_bad_request(@user.errors.messages)
end
end
private
def user_params
params.permit(:email_address, :remote_addr, :web_browser, :operating_system, :age_verification)
end
end
示例模型如下所示:
class V1::User < ActiveRecord::Base
validates_presence_of :remote_addr, :web_browser,
:operating_system, :age_verification, :email_address
validates :email_address, uniqueness: { case_sensitive: false },
email_format: { check_mx: true }
end
我的主要问题是为什么我必须在我的模型前面使用::V1?有没有更好的方法解决这个问题或者我错过了什么?
【问题讨论】:
-
当你使用没有
V1的模型时它不起作用吗?因为它是常见的选项(使用没有版本的模型)。 -
@zishe 是的,我同意这应该可行……遗憾的是,它没有。我用 pry 验证了它。模型路径与控制器路径略有不同,所以我认为它无法推断出它在哪里。控制器 = 控制器/api/vi/name.rb 和模型 = 模型/v1/name.rb
标签: ruby-on-rails namespaces rails-api