কেউ কি আমাকে পরিষ্কার-সরল পদে সংগ্রহে-নির্বাচন করতে ব্যাখ্যা করতে পারেন?


146

আমি এর জন্য রেলগুলি এপিআই ডক্স দিয়ে যাচ্ছি collection_selectএবং সেগুলি godশ্বরবাদী।

শিরোনামটি হ'ল:

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

এবং এটি তাদের দেওয়া একমাত্র নমুনা কোড:

collection_select(:post, :author_id, Author.all, :id, :name_with_initial, :prompt => true)

একটি সহজ সমিতি (একটি Userhas_many বলতে Plans, এবং একটি একটি এর Planঅন্তর্গত User) ব্যবহার করে কেউ ব্যাখ্যা করতে পারেন, সিনট্যাক্সে আমি কী ব্যবহার করতে চাই এবং কেন?

সম্পাদনা 1: এছাড়াও, আপনি যদি ব্যাখ্যা করেন যে এটি কীভাবে form_helperবা নিয়মিত ফর্মের অভ্যন্তরে কাজ করে। কল্পনা করুন আপনি এটি ওয়েব বিকাশকারীকে বুঝিয়ে দিচ্ছেন যা ওয়েব বিকাশ বোঝে, তবে রেলের কাছে 'তুলনামূলকভাবে নতুন'। আপনি কিভাবে এটি ব্যাখ্যা করবেন?


50
হ্যাঁ. এটি আমি দেখেছি সবচেয়ে ভয়ঙ্কর ডকুমেন্টেশন
জেসিম

1
পরিষ্কার করা, ডকুমেন্টেশন বেশ ঠিক আছে, শুধু নেই FormBuilderকিন্তু FormOptionsHelper: api.rubyonrails.org/classes/ActionView/Helpers/...
amiuhle

1
আমার প্রিয় অংশটি হ'ল আপনি যখন কোনও ফর্মের মধ্যে সংগ্রহ_ নির্বাচন নির্বাচন করেন এবং এটি পুরো স্বাক্ষরকে পরিবর্তন করে যাতে বস্তুটি প্যারামিটার তালিকার অংশ না হয় তবে পরিবর্তে সংগ্রহ_সইলেক্টকে বস্তুতে একটি পদ্ধতি হিসাবে ডাকা হয়। মনে করবেন না যে তারা
ডক্সে

1
এটি একটি ওপেন সোর্স প্রকল্প: ডকুমেন্টেশনটি যদি দুর্বল হয় তবে আমাদের কেবল দোষ দেওয়া যায়; এটি আশ্চর্যজনক হতে পারে যদি কেবলমাত্র আমরা এটি আরও ভাল করে তুলতে আমাদের বিট করি। ছোট / সাধারণ পিআরগুলি অনেক বেশি এগিয়ে যায়।
বিকেএসপুরজন

উত্তর:


305
collection_select(
    :post, # field namespace 
    :author_id, # field name
    # result of these two params will be: <select name="post[author_id]">...

    # then you should specify some collection or array of rows.
    # It can be Author.where(..).order(..) or something like that. 
    # In your example it is:
    Author.all, 

    # then you should specify methods for generating options
    :id, # this is name of method that will be called for every row, result will be set as key
    :name_with_initial, # this is name of method that will be called for every row, result will be set as value

    # as a result, every option will be generated by the following rule: 
    # <option value=#{author.id}>#{author.name_with_initial}</option>
    # 'author' is an element in the collection or array

    :prompt => true # then you can specify some params. You can find them in the docs.
)

অথবা আপনার উদাহরণটি নিম্নলিখিত কোড হিসাবে উপস্থাপিত হতে পারে:

<select name="post[author_id]">
    <% Author.all.each do |author| %>
        <option value="<%= author.id %>"><%= author.name_with_initial %></option>
    <% end %>
</select>

এটি নথিবদ্ধ নয় FormBuilder, তবেFormOptionsHelper


32
এটি সহজেই, আমি দেখেছি একটি জটিল রেল কাঠামোর অন্যতম সেরা ব্যাখ্যা। এটি সুস্পষ্ট করার জন্য আপনি বেসিক রেল কনস্ট্রাক্টসের সাথে স্পষ্ট ভাষা ব্যবহার করেছেন। অনেক ধন্যবাদ!!
মারকামিলিয়ন

2
আপনি কেন কখনও এটিকে "পোস্ট [লেখক_আইডি]" নাম রাখবেন?
জাসিম

@ আলেক্সকভ আপনাকে ধন্যবাদ - আপনি কি: পোস্ট, # ফিল্ড নেমস্পেস এবং: লেখক_আইডি, # ক্ষেত্রের নাম প্যারামিটারগুলির (প্রথম দুটি) - এর তাত্পর্যটি ব্যাখ্যা করতে সক্ষম হবেন - আমি বিষয়গুলির পরিকল্পনায় তাদের উদ্দেশ্য বুঝতে পারি না - করতে পারেন এগুলি বাদ দেওয়া যায় না?
বিকেএসপুরগাঁও

1
প্রথম পরম প্রকৃতপক্ষে শূন্য হতে পারে। আপনি যদি কোনও অবজেক্ট ফর্ম তৈরি করে থাকেন তবে এটি সেই অবজেক্ট হবে যাতে নির্বাচনের বাকী ফর্মের মতোই নেমস্পেসিং থাকে। যদি এটির প্রয়োজন না হয়, প্রথম শূন্য হিসাবে ছেড়ে যান। ২ য় হ'ল নিয়ন্ত্রণের নাম, সুতরাং যদি এটি কোনও বস্তুর (1 ম পরামিতি) কোনও ক্ষেত্র আপডেট করতে হয় তবে ক্ষেত্রের নামটি দ্বিতীয় প্যারামিটার। আপনি যদি অন্য ব্যবহারের জন্য কিছু ফর্ম তৈরি করে থাকেন তবে ২ য় প্যারামিটারটি যা আপনি ফর্ম নিয়ন্ত্রণের নাম এবং আইডিতে চান তা। এটিকে কেন প্রথম শূন্যের সাথে ব্যবহার করবেন? সম্ভবত কারণ: আপনি প্রম্পট বিকল্পগুলির জন্য সংগ্রহ_নির্বাচন চান।
elc

1
আমার এটিও নোট করা উচিত যে আপনি বিকল্পগুলি_পরে নির্বাচন করছেন এমন একটি সিলেক_ট্যাগে প্রম্পট প্যারামিটারটি পরীক্ষা করে একই প্রভাব পেতে পারেন, যা সম্ভবত কোনও শূন্য বস্তুর সাথে সংগ্রহ_-নির্বাচন হিসাবে একই উত্তর দেবে।
elc

21

আমি নিজে নির্বাচিত ট্যাগগুলির অনুমতিতে বেশ কিছুটা সময় ব্যয় করেছি।

collection_selectবস্তুর সংগ্রহ থেকে একটি নির্বাচন ট্যাগ তৈরি করে। এটি মাথায় রেখে,

object: বস্তুর নাম। এটি ট্যাগটির নাম উত্পন্ন করতে ব্যবহৃত হয় এবং নির্বাচিত মান উত্পন্ন করতে ব্যবহৃত হয়। এটি একটি আসল অবজেক্ট বা প্রতীক হতে পারে - পরবর্তী ক্ষেত্রে, সেই নামের উদাহরণ পরিবর্তনশীলটির বাঁধাইয়ের জন্য অনুসন্ধান করা হয়ActionController (এটি, আপনার নিয়ামকটিতে :postডাকা একটি উদাহরণের সন্ধান করে @post))

method: পদ্ধতির নাম। এটি ট্যাগটির নাম উত্পন্ন করতে ব্যবহৃত হয় .. অন্য কথায়, আপনি যে বস্তুর নির্বাচন থেকে চেষ্টা করার চেষ্টা করছেন তার বৈশিষ্ট্য

collection : বস্তুর সংগ্রহ

value_method : সংগ্রহের প্রতিটি বস্তুর জন্য, এই পদ্ধতিটি মান হিসাবে ব্যবহৃত হয়

text_method : সংগ্রহের প্রতিটি বস্তুর জন্য, এই পদ্ধতিটি প্রদর্শন পাঠ্যের জন্য ব্যবহৃত হয়

Ptionচ্ছিক পরামিতি:

options: আপনি যে বিকল্পগুলি পাস করতে পারেন। এই নথিভুক্ত করা হয় এখানে শিরোনাম বিকল্প অধীনে।

html_options: এখানে যা যা পাস হয়, কেবল উত্পন্ন এইচটিএমএল ট্যাগে যুক্ত করা হয়। আপনি যদি কোনও ক্লাস, আইডি, বা অন্য কোনও বৈশিষ্ট্য সরবরাহ করতে চান তবে এটি এখানে যায়।

আপনার সমিতি হিসাবে লেখা যেতে পারে:

collection_select(:user, :plan_ids, Plan.all, :id, :name, {:prompt => true, :multiple=>true })

ব্যবহারের ক্ষেত্রে form_for, আবার খুব সাধারণ পদে, সমস্ত ট্যাগগুলির মধ্যে form_for, যেমন, যেমন within f.text_field, আপনাকে প্রথম ( object) প্যারামিটার সরবরাহ করতে হবে না । এটি form_forসিনট্যাক্স থেকে নেওয়া হয়েছে ।


2
সময় দেওয়ার জন্য ধন্যবাদ ... একমাত্র ইস্যু যদিও সমস্ত সততার সাথে, আপনার ব্যাখ্যাটি আমার মাথায় জিনিস পরিষ্কার করতে সহায়তা করে না। আপনি প্রকৃত সংজ্ঞাতে প্রচুর পদ ব্যবহার করেছেন। আমি যদিও আপনাকে সময় দেওয়ার প্রশংসা করি - তাই এর জন্য, আমি এটি দিয়েছি।
marcamillion

4
মারকামিলিয়ন দ্বারা স্পষ্টভাবে যে কারণে বলা হয়েছে, এজন্য আমি এটিকে ভোট দিয়েছি।
জেমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.