كيفية استدعاء الأسلوب في وحدة تحكم في ملف روبي أو ملف نصي أشعل النار
-
02-01-2020 - |
سؤال
إذا كان لدي طريقة في وحدة تحكم,
على سبيل المثال ، أريد استدعاء show
طريقة في برنامج نصي دون فتح صفحات الويب.
هل من الممكن أن تفعل ذلك ?
def index
@joseph_memos = JosephMemo.all
@joseph_memo = JosephMemo.new
end
# GET /joseph_memos/1
# GET /joseph_memos/1.json
def show
binding.pry
end
المحلول
هذا يجب أن تعمل في القضبان وحدة التحكم ، تشغيل rails c
واكتب ما يلي لاختبار.
app.get('/joseph_memos/1')
output = app.html_document.root.to_s
ولكن ، إذا كنت تريد أيضا أن تتحول إلى مهمة أشعل النار.إنشاء ليب / المهام / الإجراءات.أشعل النار في التطبيق القضبان الخاصة بك.وإضافة الأسطر التالية.
namespace :actions do
desc "test show action"
task :show, [:id] => :environment do |task, args|
app = ActionDispatch::Integration::Session.new(Rails.application)
app.get("/joseph_memos/#{args[:id]}")
puts app.html_document.root.to_s
end
end
ثم تشغيل, rake actions:show[1]
لرؤية النتيجة.
هنا هي النتيجة التي تعمل (وهذا هو, bundle exec rake "actions:show[1]"
على زش)
$bundle exec rake "actions:show[1]"
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
<link data-turbolinks-track="true" href="/assets/joseph_memos.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/scaffolds.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/application.css?body=1" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/jquery.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery_ujs.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/joseph_memos.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/application.js?body=1"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="lZqYRkVfhZUhMK8EQIRsdoX2l4IpTPPhHKB44DSaq7s=" name="csrf-token" />
</head>
<body>
<p id="notice"></p>
<a href="/joseph_memos/1/edit">Edit</a> |
<a href="/joseph_memos">Back</a>
</body>
</html>
المزيد من الأمثلة: https://github.com/henrik/remit/blob/master/lib/tasks/dev_events.rake
آمل أن يكون هذا مفيدا لك.
نصائح أخرى
أعتقد أنه ممكن جدا ولكن تنفيذه لن يستحق ذلك.سيكون الحل البديل هو إنشاء فئة خدمة يمكنك الاتصال بها في إجراء العرض ويجب أن تكون قادرا أيضا على استخدام نفس الفئة خارج وحدة التحكم.
def show
MyShowActionHandler.new(params).do_something
end
class MyShowActionHandler
def initialize(params)
@params = params
end
end
ثم اتصل فقط MyShowActionHandler
في البرنامج النصي ويجب أن تعمل طالما قمت بتحميل بيئة القضبان.