ruby on rails - Rails রাউটিং হেল্পার্স(অর্থাত্ mymodel_path(মডেল)) মডেলগুলিতে ব্যবহার করা যেতে পারে?




ruby-on-rails rails-routing (5)

বলুন আমার থেল বলা একটি রেলের মডেল আছে। Thing একটি ইউআরএল বৈশিষ্ট্য আছে যা ঐচ্ছিকভাবে ইন্টারনেটে কোথাও URL এ সেট করা যেতে পারে। ভিউ কোডে, আমাকে লজিকের প্রয়োজন যা নিম্নোক্ত করে:

<% if thing.url.blank? %>
<%= link_to('Text', thing_path(thing)) %>
<% else %>
<%= link_to('Text', thing.url) %>
<% end %>

দেখুন এই শর্তাধীন যুক্তি কুৎসিত। অবশ্যই, আমি একটি সহায়ক ফাংশন তৈরি করতে পারতাম, যা এই দর্শনে পরিবর্তন করবে:

<%= thing_link('Text', thing) %>

যে verbosity সমস্যা সমাধান, কিন্তু আমি সত্যিই মডেল নিজেই কার্যকারিতা থাকার পছন্দ করবে। কোন ক্ষেত্রে, ভিউ কোড হবে:

<%= link_to('Text', thing.link) %>

এই, সম্ভবত, মডেল একটি লিঙ্ক পদ্ধতি প্রয়োজন হবে। এখানে এটি থাকতে হবে কি এখানে:

def link
  (self.url.blank?) ? thing_path(self) : self.url
end

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


Rails 3, 4, এবং 5 তে আপনি ব্যবহার করতে পারেন:

Rails.application.routes.url_helpers

যেমন

Rails.application.routes.url_helpers.posts_path
Rails.application.routes.url_helpers.posts_url(:host => "example.com")

আপনি প্রতিটি পদ্ধতি সহ নিম্নলিখিত পদ্ধতির ক্লিনার সন্ধান করতে পারেন:

class Thing
  delegate :url_helpers, to: 'Rails.application.routes' 

  def url
    url_helpers.thing_path(self)
  end
end

আমি সত্যিই পরিষ্কার সমাধান অনুসরণ পছন্দ।

class Router
  include Rails.application.routes.url_helpers

  def self.default_url_options
    ActionMailer::Base.default_url_options
  end
end

router = Router.new
router.posts_url  # http://localhost:3000/posts
router.posts_path # /posts

এটি http://hawkins.io/2012/03/generating_urls_whenever_and_wherever_you_want/ এর উপর ভিত্তি করে


ভিউতে প্রদর্শিত কোনও লজিককে কোন সহায়ক পদ্ধতিতে উপস্থাপিত করা উচিত, কারণ মডেলের পদ্ধতিগুলি ডেটা পরিচালনা করার জন্য কঠোরভাবে রয়েছে।

এখানে আপনি কি করতে পারেন:

# In the helper...

def link_to_thing(text, thing)
  (thing.url?) ? link_to(text, thing_path(thing)) : link_to(text, thing.url)
end

# In the view...

<%= link_to_thing("text", @thing) %>

(সম্পাদনা করুন: আমার আগের বাজে কথা ভুলে যান ...)

ঠিক আছে, এমন পরিস্থিতিতে থাকতে পারে যেখানে আপনি মডেল বা অন্য কোনও url এ যান ... কিন্তু আমি মনে করি না এটি মডেলের অন্তর্গত, দৃশ্যটি (অথবা মডেলটি) আরো অনুপযুক্ত বলে মনে হয়।

রুটগুলি সম্পর্কে, আমি যতদূর জানি রুটগুলি নিয়ামকগুলির ক্রিয়াকলাপগুলির জন্য (যা সাধারণত "জাদুকরীভাবে" ব্যবহার করে), সরাসরি দৃশ্যগুলিতে নয়। কন্ট্রোলার সব অনুরোধ হ্যান্ডেল করা উচিত, ভিউ ফলাফল উপস্থাপন করা উচিত এবং মডেল তথ্য পরিচালনা করা উচিত এবং দেখুন বা নিয়ামক এটি পরিবেশন করা উচিত। আমি এখানে অনেক লোককে মডেলের রুটগুলি সম্পর্কে কথা বলতে শুনেছি (যেদিকে আমি প্রায়শই এটি বিচ্ছিন্ন করতে শুরু করছি), কিন্তু আমি এটি বুঝতে পেরেছি: রুট কন্ট্রোলারদের কাছে যায়। অবশ্যই অনেকগুলি কন্ট্রোলার একটি মডেলের জন্য কন্ট্রোলার এবং প্রায়শই <modelname>sController বলা হয় (উদাহরণস্বরূপ "ব্যবহারকারী কন্ট্রোলার" মডেল "ব্যবহারকারী" এর নিয়ামক)।

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







helpermethods