রেলস: কনসোল থেকে পাথ হেল্পারের আউটপুট পরীক্ষা করুন


288

রেলগুলি আপনার যাতায়াতের জন্য সহায়ককারী হিসাবে নামযুক্ত রুটের সাথে একগুচ্ছ যাদুকে সংজ্ঞায়িত করে। কখনও কখনও, বিশেষত নেস্টেড রুটগুলির সাথে, আপনি কোনও প্রদত্ত রুট সহায়ক পদ্ধতি কলের জন্য কী URL পাবেন তা ট্র্যাক রাখতে কিছুটা বিভ্রান্তি পেতে পারে। রুবি কনসোল ব্যবহার করে কোনও প্রদত্ত সহায়তা ফাংশনটি কোন লিঙ্কটি উত্পন্ন করবে তা দেখুন? উদাহরণস্বরূপ, পোস্ট_পথ (পোস্ট) এর মতো একজন নামী সহায়ককে দেওয়া আমি কী URL টি উত্পন্ন তা দেখতে চাই।

উত্তর:


421

আপনি তাদের সাথে rake routesসরাসরি প্রদর্শন করতে পারেন ।

একটি রেলস কনসোলে আপনি কল করতে পারেন app.post_path। এটি রেল work = 2.3 এবং> = 3.1.0 এ কাজ করবে।


7
কেবল আমার নিজের মন্তব্যের ফলোআপে, মনে হচ্ছে আপনি ব্যবহার করছেন ক্ষেত্রে রেল 3 কনসোল থেকে এটি সম্ভব is প্রথমে, যেমন অ্যাপ্লিকেশন অবজেক্টে একটি জাল অনুরোধটি আটকে রাখুন, app.get "/" ঠিক তেমন উদাহরণস্বরূপ_ পছন্দসই পদ্ধতিগুলি যেমন এখন সেগুলি ডিফল্টরূপে সুরক্ষিত রয়েছে calling এরকম কিছু: app.instance_eval{ post_path(post) }
চুবাস

উপরের চুবসের মন্তব্য ails টি রেলগুলিতে কাজ করেছে tests পরীক্ষাটি লেখার সময় এটি খুব কার্যকরী তাই রুটটি সঠিক নয় তা খুঁজে পেতে আমাকে 1 মিনিট অপেক্ষা করতে হবে না। এছাড়াও, কল পেতে এবং পোস্ট করা পরীক্ষা করে নেওয়া দুর্দান্ত। আপনাকে প্রথমে app.get কল করার দরকার নেই।
বি সেভেন

7
app.teh_pathএখনও রেল 4.0 এ কাজ করে এবং মূল অ্যাপ্লিকেশন পাথ থেকে ইঞ্জিন পাথগুলি পৃথক করতে দরকারী।
নুরেটিন

5
আপনি যদি কোনও ইঞ্জিন মাউন্ট করছেন, উদাহরণস্বরূপ mount Spree::Core::Engine, :at => '/', তবে আপনি ইঞ্জিন নামের মাধ্যমে পাথগুলি অ্যাক্সেস করতে চাইবেন app.spree_core_engine.some_path। অথবা, যদি "ENGINE_NAME" মত ভিন্ন কিছু করার জন্য কনফিগার করা হয় এই কোডে তারপর আপনি করতে চাই app.spree.some_path
জর্ডান ব্রো 21

আমাকে এর hostমতো প্যারামিটারটি যুক্ত করতে হয়েছিল :app.article_url(my_article, host: 'mydomain.com')
বেসি

352

আপনি এটিও করতে পারেন

include Rails.application.routes.url_helpers

সহায়তাকারীদের অ্যাক্সেসের জন্য কনসোল সেশনগুলির ভিতরে থেকে:

url_for controller: :users, only_path: true
users_path
# => '/users'

অথবা

Rails.application.routes.url_helpers.users_path

4
এটি উপরের সমাধান আইএমওর চেয়ে অনেক সহজ
অ্যান্ড্রু

2
এটি আমার মতে মূল প্রশ্নের সঠিক উত্তর
nemesisdesign

এটি সেরা উত্তর আইএমও হওয়া উচিত
লুক

4
আমি এটি মনে রাখতে বিরক্ত হতে পারি না, তাই অনুলিপি / আটকানোর জন্য আমি প্রতি দু'দিন পরে এখানে ফিরে আসি। ধন্যবাদ।
স্পেনসার

1
আপনি কি সরাসরি কনসোল থেকে url_helpers রেফারেন্স করতে পারেন না Rails.application.routes.url_helpers.users_path?
TheMadDeveloper

25

রেলস কনসোলে, চলক অ্যাপ্লিকেশনটি একটি সেশন অবজেক্ট ধারণ করে যার উপর আপনি উদাহরণের পদ্ধতি হিসাবে পাথ এবং ইউআরএল সহায়কদের কল করতে পারেন।

app.users_path

11

আপনি সর্বদা path_helpersকনসোলের আউটপুট চেক করতে পারেন । কেবল সহকারীর সাহায্যে ব্যবহার করুনapp

app.post_path(3)
#=> "/posts/3"

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"

2

মনে রাখবেন যে আপনার রুটটির নাম-স্থান রয়েছে, পছন্দ করুন:

product GET  /products/:id(.:format)  spree/products#show

তারপরে চেষ্টা করুন:

helper.link_to("test", app.spree.product_path(Spree::Product.first), method: :get)

আউটপুট

Spree::Product Load (0.4ms)  SELECT  "spree_products".* FROM "spree_products"  WHERE "spree_products"."deleted_at" IS NULL  ORDER BY "spree_products"."id" ASC LIMIT 1
=> "<a data-method=\"get\" href=\"/products/this-is-the-title\">test</a>" 

1
spreeউদাহরণস্বরূপ ধন্যবাদ , আপনি স্বর্গ থেকে একজন দেবদূত from
Bonafernando
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.