এখানে এখন আমি ব্যবহার করছি এমন একটি কোডের অংশ:
<%= f.select :project_id, @project_select %>
params[:pid]
পৃষ্ঠাটি লোড হওয়ার সাথে এর ডিফল্ট মানটির সমান করতে কীভাবে এটি পরিবর্তন করবেন ?
এখানে এখন আমি ব্যবহার করছি এমন একটি কোডের অংশ:
<%= f.select :project_id, @project_select %>
params[:pid]
পৃষ্ঠাটি লোড হওয়ার সাথে এর ডিফল্ট মানটির সমান করতে কীভাবে এটি পরিবর্তন করবেন ?
উত্তর:
এটি করা উচিত:
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
options_for_select
ভাল উপায়। এটি যে কোনও পরিস্থিতির পক্ষে ভাল, ফর্ম সম্পাদনার পক্ষেও ভাল।
বর্তমান উদাহরণের সঠিক বৈশিষ্ট্যটি ব্যবহার করুন (উদাঃ @work.project_id
):
<%= f.select :project_id, options_for_select(..., @work.project_id) %>
select_tag
খুব কার্যকর হয়। ধন্যবাদ এটি সত্যিই আমাকে সাহায্য করেছে।
options_for_select(..., f.object.project_id )
এই সমস্ত উত্তরের সমস্যা হ'ল তারা যদি আপনার রেকর্ড সম্পাদনা করার চেষ্টা করেও ক্ষেত্রটিকে ডিফল্ট মানটিতে সেট করে।
আপনাকে আপনার বিদ্যমান মানটিতে ডিফল্ট সেট করতে হবে এবং তারপরে আপনার যদি মান না থাকে তবে কেবল এটি প্রকৃত ডিফল্টে সেট করতে হবে। তাই ভালো:
f.select :field, options_for_select(value_array, f.object.field || default_value)
f.object.field
আপনার সাথে পরিচিত না থাকার জন্য সর্বদা ব্যবহার করুন f.object
তারপরে আপনার ক্ষেত্রের নামটি যুক্ত করুন।
select2
জেএস প্লাগইনের সাথেও কাজ করে । আপনি একই ফর্মের সাথে রেকর্ড তৈরি বা সম্পাদনা এবং সিলেক্ট 2 ব্যবহার করে বিশেষত স্থানধারক পাঠ্যের সাহায্যে পুরোপুরি কাজ করে।
এটা চেষ্টা কর:
<%= f.select :project_id, @project_select, :selected => f.object.project_id %>
params[:pid]
কাজ হয়নি, তবে আপনার উদাহরণটি কার্যকর হয়েছে।
যদি প্যারামগুলি [: pid] একটি স্ট্রিং, যা এটি যদি কোনও ফর্ম থেকে আসে তবে এটি সম্ভবত আপনার ব্যবহারের প্রয়োজন
params[:pid].to_i
সঠিক আইটেমটি নির্বাচনের তালিকায় নির্বাচিত হওয়ার জন্য
@project
শিরোনামের পরিবর্তে ডাটাবেস টেবিলের আইডি দিয়ে আমার পরিবর্তনশীলকে জনপ্রিয় করে তুললাম , এই কোডটি form.select
সাহায্যকারের পিছনে যুক্ত হয়েছে : selected: @project
ধন্যবাদ @ উদ্যানেলগল
আমি সমাধান খুঁজে পেয়েছি এবং আমি দেখতে পেয়েছি যে আমি আরআর-তে বেশ অভিজ্ঞ।
উপরে বর্ণিত দর্শন পরিচালনা করে এমন নিয়ামকের ভিতরে এটি যুক্ত করুন:
@work.project_id = params[:pid] unless params[:pid].nil?
আমি এই কাজ না করতে পেতে এবং দেখা গেছে যে আমি না শুধুমাত্র সঠিক "নির্বাচিত" HTML অ্যাট্রিবিউট যোগ করার জন্য প্রয়োজন হতে পারে <option>
ট্যাগ কিন্তু এছাড়াও থেকে <select>
ট্যাগ। নির্বাচিত ট্যাগের নির্বাচিত বৈশিষ্ট্যে MDN এর ডক্সগুলি বলে:
নির্বাচিত - বুলিয়ান বৈশিষ্ট্য নির্দেশ করে যে একটি নির্দিষ্ট বিকল্প প্রাথমিকভাবে নির্বাচন করা যেতে পারে।
এর অর্থ কোডটি দেখতে হওয়া উচিত:
f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
বিকল্পভাবে, আপনি নির্ধারণ করতে পারেন: প্রজেক্ট_আইডি বৈশিষ্ট্যটি নিয়ামকটিতে, যেহেতু f.select এর প্রথম যুক্তিটি সেই বিশেষ বৈশিষ্ট্যটিকে টানছে।
যদি f অবজেক্টটি মুদ্রণের চেষ্টা করেন, তবে আপনি দেখতে পাবেন যে f.object রয়েছে যা নির্বাচিত আইটেমটি পাওয়ার জন্য অনুসন্ধান করা যেতে পারে (সমস্ত রেলের সংস্করণ> ২.৩ এর জন্য প্রযোজ্য)
logger.warn("f #{f.object.inspect}")
সুতরাং, সঠিকভাবে নির্বাচিত বিকল্পটি পেতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করুন:
:selected => f.object.your_field
এটি ইতিমধ্যে ব্যাখ্যা করা হয়েছে, একটি উদাহরণ দেওয়ার চেষ্টা করবে
নির্বাচন তালিকা হতে দিন
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' %>
উপরের মাইক বেথানীর উত্তর যখন একটি নতুন রেকর্ড তৈরি হচ্ছে তখন একটি ডিফল্ট মান সেট করতে কাজ করেছিল এবং এখনও সম্পাদকের ফর্মটিতে ব্যবহারকারী নির্বাচিত মানটি রাখে। তবে, আমি একটি মডেল বৈধতা যুক্ত করেছি এবং এটি আমাকে ফর্মটি জমা দিতে দেয় না। ফিল্ডে একটি মডেল যাচাইকরণ এবং একটি সম্পাদনা মোডে যখন ব্যবহারকারী নির্বাচিত মান দেখানোর জন্য আমার পক্ষে কাজ করেছে তা এখানে।
<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
এটি আপনার জন্য কাজ করা উচিত। এটি কেবল {:value => params[:pid] }
html_options ভেরিয়েবলের কাছে যায় passes
<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>