我有一个控制器
class DatasourcesController < ApplicationController
在那个控制器中,我有:
def show
....
@datasource = DataSource.find(datasource_id)
...
end
在datasource_helper.rb
中,我有:
def datasource_type
puts "\r\n\r\n::::::::::::\r\n ONCE AGAIN @datasource = #{@datasource.inspect}\r\n::::::::::::\r\n\r\n"
# @datasource[:dsd_type_id] = "GOV"
@datasource.partnertype.par_description
end
哪里
puts "\r\n\r\n::::::::::::\r\n ONCE AGAIN @datasource = #{@datasource.inspect}\r\n::::::::::::\r\n\r\n"
打印类似:
::::::::::::
ONCE AGAIN @datasource = #<DataSource ...., dsd_type_id: "XRPT", ...>
::::::::::::
执行此@datasource.partnertype.par_description
时,会产生这种查询:
SELECT `partnertype`.* FROM `partnertype` WHERE `partnertype`.`par_code` = 'XRPT' LIMIT 1
您能解释一下这种魔术如何发生吗?
@datasource
方法从何而来?当我检查它时,我看到它是哈希。
换句话说,哪些规则/惯例适用于此?
这是否意味着实例变量@datasource
默认继承了形成相应模型的所有方法?
对不起,但我不熟悉所有这些隐式规则/惯例,使我很烦。
答案 0 :(得分:0)
find
返回一个对象(选中@datasource.class
),但是inspect
将其打印在friendly way中。
换句话说,@datasource
“包含”模型类的一个实例(DataSource
),它是ApplicationRecord
的子类,ActiveRecord::Base
是Route::get('itemsImages/{filename}', function ($filename)
{
$path = app_path('public/images/itemsImages') . '/' . $filename;
$response = null;
if (file_exists($path))
{
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
}
else
{
dd($path);
//does not exist
}
return $response;
})->name('route.name');
的子类,这就是为什么您拥有所有这些方法的原因。