রেলগুলি সাহায্যকারী নির্বাচন করুন - ডিফল্ট নির্বাচিত মান, কীভাবে?


181

এখানে এখন আমি ব্যবহার করছি এমন একটি কোডের অংশ:

<%= f.select :project_id, @project_select %>

params[:pid]পৃষ্ঠাটি লোড হওয়ার সাথে এর ডিফল্ট মানটির সমান করতে কীভাবে এটি পরিবর্তন করবেন ?


পৃষ্ঠাটি লোড হওয়ার পরে আপনি কোনও ডিফল্ট প্রকল্প নির্বাচন করতে চান কিনা তা আমি নিশ্চিত নই, যদি: প্রজেক্ট_আইড সেট না করা থাকে, বা আপনি যদি প্যারামের হ্যাশ: পিড হিসাবে নির্বাচনের মানটি ফিরিয়ে দিতে চান।
টাইলেন্ডর

উত্তর:


222

এটি করা উচিত:

<%= f.select :project_id, @project_select, :selected => params[:pid] %>

5
প্যারাম ছাড়া, options_for_selectভাল উপায়। এটি যে কোনও পরিস্থিতির পক্ষে ভাল, ফর্ম সম্পাদনার পক্ষেও ভাল।
অ্যাড্রিয়ানো রিসেন্ডে

F.select বনাম (options_for_select () আপনার ফাংশন তাকান মনে রাখবেন এই বিভিন্ন ফাংশন আছে: এখানে
FlyingV

126

বর্তমান উদাহরণের সঠিক বৈশিষ্ট্যটি ব্যবহার করুন (উদাঃ @work.project_id):

<%= f.select :project_id, options_for_select(..., @work.project_id) %>

4
এটি সেরা উত্তর কারণ এটি select_tagখুব কার্যকর হয়। ধন্যবাদ এটি সত্যিই আমাকে সাহায্য করেছে।
স্টেফেনমুরডোচ

7
এছাড়াও আপনি চেষ্টা করে দেখতে পারেনoptions_for_select(..., f.object.project_id )
18augst

অনেক ধন্যবাদ! অন্যান্য সমস্ত গৃহীত উত্তরগুলি ভেরিয়েবলের মাধ্যমে কীভাবে নির্বাচন করবেন তা বলে না।
মাইক বেলঞ্জার

52

রেলগুলি 3.0.9

select options_for_select([value1, value2, value3], default)

আমি এই সমাধান জিনিসটা করতে পারে যতক্ষণ না আমি মান অ্যারে চারপাশে আপনার ক্লোজিং বন্ধনী খেয়াল আগে কমা আপনার ডিফল্ট মান আলাদা ... আমি এই বন্ধনী এখানে মিসvalue3], default
BigRon

33

এই সমস্ত উত্তরের সমস্যা হ'ল তারা যদি আপনার রেকর্ড সম্পাদনা করার চেষ্টা করেও ক্ষেত্রটিকে ডিফল্ট মানটিতে সেট করে।

আপনাকে আপনার বিদ্যমান মানটিতে ডিফল্ট সেট করতে হবে এবং তারপরে আপনার যদি মান না থাকে তবে কেবল এটি প্রকৃত ডিফল্টে সেট করতে হবে। তাই ভালো:

f.select :field, options_for_select(value_array, f.object.field || default_value)

f.object.fieldআপনার সাথে পরিচিত না থাকার জন্য সর্বদা ব্যবহার করুন f.objectতারপরে আপনার ক্ষেত্রের নামটি যুক্ত করুন।


3
এটি একটি পরিষ্কার সমাধান, এবং যেমনটি উল্লেখ করা হয়েছে আপনি কেবলমাত্র নতুনতে এবং সম্পাদনার ক্ষেত্রে বর্তমান মান সেট করতে চান।
গণনা 0

1
আমি জানি এটি একটি পুরানো থ্রেড তবে এটির যে কেউ আসতে পারে তার পক্ষে, এই উত্তরটি select2জেএস প্লাগইনের সাথেও কাজ করে । আপনি একই ফর্মের সাথে রেকর্ড তৈরি বা সম্পাদনা এবং সিলেক্ট 2 ব্যবহার করে বিশেষত স্থানধারক পাঠ্যের সাহায্যে পুরোপুরি কাজ করে।
cdouble.bhuck

আমার মতে এটি উত্তর হিসাবে গ্রহণযোগ্য হওয়া উচিত, যেমন @ মাইক বেথনি বলেছিলেন যে সমস্ত অন্যান্য উত্তরগুলি যখন রেলের কাছে ফর্মটি পুনরায় ব্যবহার করতে হবে তখন কেবল নতুন রেকর্ডের জন্য ফর্মটি রেন্ডার করা হয়। কুডোস মাইক
এরিক ক্যাস্ট্রিলো

22

এটা চেষ্টা কর:

    <%= f.select :project_id, @project_select, :selected => f.object.project_id %>

রেল 4 ব্যবহার করে, params[:pid]কাজ হয়নি, তবে আপনার উদাহরণটি কার্যকর হয়েছে।
এরিক ওয়াঞ্চিক

ধন্যবাদ "f.fields_for" ধন্যবাদ হিসাবে আমি একটি আংশিক ব্যবহার করছি বলে এটি আমার পক্ষে কাজ করেছে।
হুগো

11

যদি প্যারামগুলি [: pid] একটি স্ট্রিং, যা এটি যদি কোনও ফর্ম থেকে আসে তবে এটি সম্ভবত আপনার ব্যবহারের প্রয়োজন

params[:pid].to_i  

সঠিক আইটেমটি নির্বাচনের তালিকায় নির্বাচিত হওয়ার জন্য


এই উত্তরটি আমাকে আমার সমস্যা চিহ্নিত করতে সহায়তা করেছে। আমার নির্বাচিত বাক্সটি গতিশীল এবং ডাটাবেস থেকে সংগ্রহ টানছে। আমি আইটেমের কোনও আইডি নয়, একটি শিরোনাম দ্বারা ডিফল্ট নির্বাচন জনসাধারণের চেষ্টা করছিলাম। এই উত্তরটি আমাকে এই সমস্যাটি দেখতে সহায়তা করেছে এবং একবার আমি @projectশিরোনামের পরিবর্তে ডাটাবেস টেবিলের আইডি দিয়ে আমার পরিবর্তনশীলকে জনপ্রিয় করে তুললাম , এই কোডটি form.selectসাহায্যকারের পিছনে যুক্ত হয়েছে : selected: @projectধন্যবাদ @ উদ্যানেলগল
ক্রিস্টোফার ওয়ারিংটন ২

10

আমি সমাধান খুঁজে পেয়েছি এবং আমি দেখতে পেয়েছি যে আমি আরআর-তে বেশ অভিজ্ঞ।

উপরে বর্ণিত দর্শন পরিচালনা করে এমন নিয়ামকের ভিতরে এটি যুক্ত করুন:

@work.project_id = params[:pid] unless params[:pid].nil?


3

আমি এই কাজ না করতে পেতে এবং দেখা গেছে যে আমি না শুধুমাত্র সঠিক "নির্বাচিত" HTML অ্যাট্রিবিউট যোগ করার জন্য প্রয়োজন হতে পারে <option>ট্যাগ কিন্তু এছাড়াও থেকে <select>ট্যাগ। নির্বাচিত ট্যাগের নির্বাচিত বৈশিষ্ট্যে MDN এর ডক্সগুলি বলে:

নির্বাচিত - বুলিয়ান বৈশিষ্ট্য নির্দেশ করে যে একটি নির্দিষ্ট বিকল্প প্রাথমিকভাবে নির্বাচন করা যেতে পারে।

এর অর্থ কোডটি দেখতে হওয়া উচিত:

f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}


0

বিকল্পভাবে, আপনি নির্ধারণ করতে পারেন: প্রজেক্ট_আইডি বৈশিষ্ট্যটি নিয়ামকটিতে, যেহেতু f.select এর প্রথম যুক্তিটি সেই বিশেষ বৈশিষ্ট্যটিকে টানছে।


0

যদি f অবজেক্টটি মুদ্রণের চেষ্টা করেন, তবে আপনি দেখতে পাবেন যে f.object রয়েছে যা নির্বাচিত আইটেমটি পাওয়ার জন্য অনুসন্ধান করা যেতে পারে (সমস্ত রেলের সংস্করণ> ২.৩ এর জন্য প্রযোজ্য)

logger.warn("f #{f.object.inspect}")

সুতরাং, সঠিকভাবে নির্বাচিত বিকল্পটি পেতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করুন:

:selected => f.object.your_field 

0

এটি ইতিমধ্যে ব্যাখ্যা করা হয়েছে, একটি উদাহরণ দেওয়ার চেষ্টা করবে

নির্বাচন তালিকা হতে দিন

select_list = { eligible: 1, ineligible: 0 }

সুতরাং নিম্নলিখিত কোড ফলাফল

<%= f.select :to_vote, select_list %>

<select name="to_vote" id="to_vote">
  <option value="1">eligible</option>
  <option value="0">ineligible</option>
</select>

সুতরাং ডিফল্টরূপে একটি বিকল্প বাছাই করতে আমাদের নির্বাচিত: মানটি ব্যবহার করতে হবে ।

<%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %>

যদি ক্যান_ভোট? এটি নির্বাচিত সেটটিকে সত্য করে দেয় : 1 তারপরে প্রথম মানটি দ্বিতীয়টি নির্বাচিত হবে।

select name="driver[bca_aw_eligible]" id="driver_bca_aw_eligible">
  <option value="1">eligible</option>
  <option selected="selected" value="0">ineligible</option>
</select>

যদি সিলেক্ট অপশনগুলি কেবলমাত্র একটি অ্যারের তালিকার পরিবর্তে থাকে তবে নির্বাচিত কেবলমাত্র মান হিসাবে বেছে নেওয়া হয় যদি উদাহরণস্বরূপ

select_list = [ 'eligible', 'ineligible' ]

এখন নির্বাচিত মাত্র নিতে হবে

<%= f.select :to_vote, select_list, selected: 'ineligible' %>

0

উপরের মাইক বেথানীর উত্তর যখন একটি নতুন রেকর্ড তৈরি হচ্ছে তখন একটি ডিফল্ট মান সেট করতে কাজ করেছিল এবং এখনও সম্পাদকের ফর্মটিতে ব্যবহারকারী নির্বাচিত মানটি রাখে। তবে, আমি একটি মডেল বৈধতা যুক্ত করেছি এবং এটি আমাকে ফর্মটি জমা দিতে দেয় না। ফিল্ডে একটি মডেল যাচাইকরণ এবং একটি সম্পাদনা মোডে যখন ব্যবহারকারী নির্বাচিত মান দেখানোর জন্য আমার পক্ষে কাজ করেছে তা এখানে।

  <div class="field">
    <%= f.label :project_id, 'my project id', class: "control-label" %><br>
    <% if @work.new_record? %>
      <%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], true), {}, required: true, class: "form-control" %><br>
    <% else %>
      <%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], @work.project_id), {}, required: true, class: "form-control" %><br>
    <% end %>
  </div>

মডেল বৈধতা

  validates :project_id, presence: true

-2

এটি আপনার জন্য কাজ করা উচিত। এটি কেবল {:value => params[:pid] }html_options ভেরিয়েবলের কাছে যায় passes

<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>

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