我必须只创建一个rails API,即输入是POST请求,输出将是JSON响应。我必须使用自己的表名与mysql数据库进行交互,即已经创建了mysql表。 下面是" helpers"的文件夹结构。即使我们没有使用任何"观点"。我们正在从控制器访问辅助方法。请确认我是否正确。提前谢谢。
1)app / controllers / application_controller.rb
class ApplicationController < ActionController::API
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
end
2)app / controllers / feature_management_controller.rb
class FeatureManagementController < ApplicationController
def populate_bean
@json = OrionCountryList.new.sample_function
end
def send_response(bean)
helper = FeatureManagementHelper.new
if (bean.method.eql?"get_feature_list") && (!bean.app_key.blank?) && (bean.app_key!=nil) && (bean.app_key.casecmp("NULL")!=0)
logger.info bean.print_bean "Request for fetching featureList by app_key : " + bean.app_key.to_s + " And userID: " + bean.user_id.to_s
@@json_response = helper.get_feature_list bean
else
logger.error "METHOD NOT FOUND. method during feature management :"+bean.method+" app_key :"+bean.app_key
@@json_response = {:message => "API not avaliable"}
end
logger.info("Final json_response sent to app : "+@@json_response.to_json)
render :json => @@json_response
end
end
3)app / helpers / application_helper.rb
class ApplicationHelper
APP_CONFIG = YAML.load(File.read(File.expand_path('../../../config/app_config.yml', __FILE__)))
end
4)app / helpers / feature / feature_management_helper.rb
class FeatureManagementHelper
def get_feature_list(bean)
response = Hash.new
response = {:success_code => "1"}
return response
end
end
我们正在使用&#34; class&#34;帮助者内部的关键词。但在搜索时,似乎&#34;模块&#34;关键词是必要的。但我们无法找到在控制器内访问辅助模块方法的方法。
感谢任何帮助。谢谢!!!
@Ekkerhard,谢谢你的建议, 我已经避免以上述方式使用帮助程序,而是使用PORO来实现我的业务逻辑,如@spikermann所建议的那样 this_link
实施更改后,我的代码结构如下所示:
1)app / controllers / feature_management_controller / feature_management.rb
class FeatureManagementController
class FeatureManagement
def get_feature_list(bean)
response = Hash.new
response = {:success_code => "1"}
return response
end
end
end
同样适用于任何控制器&#34; test_controller&#34;我有一个名为&#34; test_controller&#34;的文件夹。在位置/ app / controllers / 我将业务逻辑保存在这个&#34; test_controller&#34;中的test.rb文件中。文件夹中。
2)我们在/ app / controllers
中有所有控制器3)我们拥有/ app / models
中的所有模型4)我们正在读取/config/application.rb
中的配置文件 class Application < Rails::Application
config.autoload_paths += Dir["#{config.root}/lib/**/"]
APP_CONFIG = YAML.load(File.read(File.expand_path('app_config.yml', __FILE__)))
config.time_zone = "New Delhi"
config.active_record.default_timezone = :local
config.autoload_paths += Dir["#{config.root}/app/**/"]
end
虽然如果我从feature_management.rb文件中读取配置文件,一切正常,即将此行添加到feature_management.rb文件中:
/app/controllers/feature_management_controller/feature_management.rb
APP_CONFIG = YAML.load(File.read(File.expand_path('../../../../config/app_config.yml',
__FILE__)))
但是在尝试从application.rb文件中读取配置时出现错误:
NameError (uninitialized constant FeatureManagementController::FeatureManagement::APP_CONFIG):
我想知道这是否是正确的方法,并且有更好的方法。
欣赏您的输入.. !!!
答案 0 :(得分:0)
如果需要,可以在控制器中包含模块并访问方法。像:
include HelperModuleName
答案 1 :(得分:0)
首先,我根本不会以这种方式使用助手。在我看来,帮助者只是为了削减&#34;愚蠢的&#34;来自视图模板的代码,以减少&#34;编程&#34;内部混乱,否则HTML&#39; ish / JSON&#39; ish模板。他们绝对不是领域方法。他们做与域无关的东西,如渲染表单元素,复杂表格或类似的东西。
仅仅因为你没有输出HTML,但JSON并不意味着你必须完全放弃MVC范式,就像你正在做的那样。有JSON模板,请参阅In Rails, how do you render JSON using a view?。
您正在使用帮助程序加载配置。配置位于config/application.rb
,config/environments/*.rb
,config/initializers/*.rb
等。 - 请参阅http://guides.rubyonrails.org/configuring.html。您永远不需要在帮助程序中加载YAML。
您的控制器代码建议您不要使用routes.rb来构建请求。像你在控制器中的分支对我来说是一个很大的气味。请参阅http://guides.rubyonrails.org/routing.html。
也许不是你要找的答案,但那是我的2欧元。 :)