gpt4 book ai didi

ruby-on-rails - rails 4 namespace::文件夹结构模型和 Controller

转载 作者:行者123 更新时间:2023-12-01 01:00:05 24 4
gpt4 key购买 nike

我当前的应用程序结构如下所示:

enter image description here

示例 Controller 如下所示:

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::User ,然后在 RegisterController 中编码将首先查看 Api::V1::RegisterController对于 V1 ,然后,找不到一个,将向上移动到 Api::V1 ,然后直到 Api ,它在哪里找到 V1 ,所以它成功找到了常数V1 .但是Api::V1不包含名为 User 的常量(或者至少不是你想的那个)。把 ::前面使常量搜索从模块 namespace 的顶部开始,或多或少。

至于是否有更好的方法...也许你想交换 V1 的级别与 Api ?然后会有一个顶级版本控制模块和V1::Api::WhateverController可以找到 User不指定版本。如果这就是你想要达到的目标......

关于ruby-on-rails - rails 4 namespace::文件夹结构模型和 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24282818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com