كيفية استدعاء الأسلوب في وحدة تحكم في ملف روبي أو ملف نصي أشعل النار

StackOverflow https://stackoverflow.com//questions/25091649

  •  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 في البرنامج النصي ويجب أن تعمل طالما قمت بتحميل بيئة القضبان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top