পোস্টগুলির লিঙ্কগুলির জন্য রেল লিঙ্ক_ টু ব্যবহার করে


86

আমার একটি লিঙ্ক রয়েছে যার সাথে আমার একটি পোস্টের অনুরোধ জমা দিতে হবে। সাধারণত, আমি jQuery ব্যবহার করব এবং লিঙ্কটির ডিফল্ট আচরণ প্রতিরোধ করব এবং তারপরে গন্তব্যে একটি ফর্ম জমা দেব। এটি দেখে মনে হচ্ছে যেন কোনও কিছুই রেলগুলি আমাকে সাহায্য করতে সক্ষম হয়। নিশ্চিত, যথেষ্টlink_to পদ্ধতিতে একটি পোস্ট পোস্ট পদ্ধতি নির্দিষ্ট করার জন্য একটি বিকল্প রয়েছে:

link_to "Profile", 'http://example.com/profile', method: :post

এটি কাজ করে তবে আমার 2 পরামিতি যুক্ত করতে হবে। আমি চেষ্টা করেছিলাম:

link_to "Profile", 'http://example.com/profile', method: post, param1: 'value1', param2: 'value2'

এই মাত্র পরামিতি যুক্ত <a> এইচটিএমএল উপাদানগুলিতে , তবে লিঙ্কটি ক্লিক করার সময় সেগুলি জমা দেয়নি:

<a rel="nofollow" param1="value1" param2="value2" data-method="post" href="http://example.com/profile">Profile</a>

প্যারামিটারগুলি ব্যবহার করে link_toবা অন্য কোনও রেল পদ্ধতি ব্যবহার করে কি কোনও পোষ্ট অনুরোধ করার কোনও উপায় আছে ? আমি রেলগুলি ব্যবহার করছি 3.2.9।


আপনি এটি করতে পারেন মনে হয় না। নেট / HTTP বা HTTP পার্টির সাহায্যে আপনার কন্ট্রোলারে সম্ভবত এটি সবচেয়ে ভাল করা?
মাইক ক্যাম্পবেল

এটি আমার নিয়ামকটিতে করতে পারে না, ব্যবহারকারীর অন্য সাইটে পরিচালিত হওয়া প্রয়োজন। দেখে মনে হচ্ছে আপনি ঠিক আছেন, আমার পক্ষে এটি করার জন্য কোনও অন্তর্নির্মিত লিঙ্ক ব্যবস্থা নেই।
এ।

উত্তর:


143

সংক্ষিপ্ত উত্তরটি হ'ল যদি আপনি "পরামিতি" বলতে যা বোঝায় তা ফর্ম ক্ষেত্রগুলি হয় তবে আপনি কেবল এটি করতে পারবেন না (কমপক্ষে কোনও সরল উপায়ে আমি দেখতে পাচ্ছি না)। পরিবর্তে আপনাকে একটি লিঙ্কের মতো দেখতে স্টাইলযুক্ত একটি সাবমিট বাটন দিয়ে একটি ফর্ম ব্যবহার করা উচিত (যদি আপনি এটি দেখতে চান তবে এটি)।

অন্যদিকে আপনি যদি কোয়েরি পরামিতিগুলি বোঝাতে চেয়েছিলেন তবে এটি কাজ করবে:

link_to "Profile", profile_path(@profile.id, param1: 'value1', param2: 'value2'), method: :post

4
আমার প্রশ্নটি কেবল আপডেট করেছে, আমি এই লিঙ্কগুলির জন্য আসলে একটি বাহ্যিক URL ব্যবহার করছি।
এ।

আমি মূলত একটি নোট যুক্ত করেছি যে আপনি যা করতে চান তা কোনও লিঙ্ক ব্যবহার করে সম্ভব নয়। আপনার জমা দেওয়ার বোতাম সহ একটি ফর্ম দরকার।
ক্রিস সালজবার্গ

4
এটি লক্ষণীয় গুরুত্বপূর্ণ যে কোনও ব্যবহারকারী জাভাস্ক্রিপ্ট অক্ষম করে থাকলে লিঙ্কটি একটি "জিইটি" অনুরোধে ডিফল্ট হবে।
bkunzi01

9

আপনি ইউআরএলটিতে এইভাবে প্যারামিটারগুলি এনকোড করতে পারেন:

link_to "Profile", 'http://example.com/profile?' + {param1: 'value1', param2: 'value2'}.to_param, method: :post

যদি এটি আপনার প্রয়োজনের সাথে খাপ খায় না তবে আপনি ফর্মের চেয়ে আরও ভাল ব্যবহার করুন link_to


পরামিতিগুলি যুক্ত করার পক্ষে এটি একটি খুব সুন্দর উপায়।
নাথানভদা

আমার প্রয়োজনের জন্য কাজ করে না, পরামিতিগুলি পোস্ট পরামিতি হওয়া দরকার be তবে ধন্যবাদ, আমি তো_প্রেম পদ্ধতি সম্পর্কে জানতাম না। আপনার ?প্রোফাইলের পরেও দরকার ।
এ।

ঠিক আছে আমি বুঝতে পারি, তারপরে আমি মনে করি আপনাকে একটি ফর্ম লিখতে হবে। আপনি কোনও সহায়ক পদ্ধতি লিখতে পারেন যা এই ফর্মটি তৈরি করবে যদি আপনার এই যুক্তিকে বেশ কয়েকবার পুনরাবৃত্তি করতে হয়।
এড্রিয়েন কোকিয়ো

4
এটি ওপি-র প্রশ্নের উত্তর দেয় না তা সত্ত্বেও, আপনি @ শিয়ায়ামার জবাব হিসাবে এটির জন্য একটি ইউআরএল সহায়ক ব্যবহার করা উচিত
বেন ওয়েস্ট

@ বেন ওয়েস্ট: সহায়কটি প্রাথমিকভাবে ব্যবহৃত হয়নি এবং আমি ধরে নিয়েছিলাম এটি অর্থবহ ছিল (উদাহরণস্বরূপ এটি কোনও বাহ্যিক URL হতে পারে)
অ্যাড্রিয়েন কোকিয়ো

3

মনে রাখবেন যে যদি ব্যবহারকারী জেএস অক্ষম করে ফেলেছে বা আপনি পূর্বনির্ধারিতভাবে আসা আপত্তিজনক জেএস লাইব্রেরিগুলি মুছে ফেলেছেন, link_toতবে নীরবে একটির মাধ্যমে জমা দেওয়া হবেGET অনুরোধের ।

সাধারণভাবে, আমি লিঙ্কগুলি সম্পাদন করার খুব পছন্দ করি না POST অনুরোধগুলি । আমি মনে করি এটি একটি ফর্ম এবং একটি বোতামের ভূমিকা।

সুতরাং, একটি সহজ (এবং নিরাপদ) বিকল্পটি হ'ল রেলগুলি বোতাম_এর সাহায্যকারীকে ব্যবহার করা :

button_to 'Profile', profile_path(@profile, param1: 'value1', param2: 'value2')

button_tomethodবিকল্পটি সমর্থন করে তবে এটি ডিফল্ট হিসাবে postআমি কেবল এটি বাদ দিয়েছি।


কোস্তাসের সাথে একমত তদুপরি, পদ্ধতি পোস্টের সাথে লিঙ্ক_ টু ইন্টারনেট এক্সপ্লোরারে ভাল কাজ করে না।
পিয়েরে-ইয়ভেস ও।

1

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

<%= form_tag('http://something_postable', :method => :post, :class => 'internal') %></form>
<%= link_to_function('Label for Link', 'previous("form").submit()', :title => 'Hover text for link') %>

ফর্মটি একটি শ্রেণি বরাদ্দ করা হয়েছে যাতে আপনি এটি স্টাইল করতে পারেন বা এটি CSS এর মাধ্যমে লুকিয়ে রাখতে পারেন (উদাঃ 'প্রদর্শন: ইনলাইন')


1

পরামিতি এবং http পদ্ধতি একসাথে হওয়া উচিত {param1: 'value1', param2: 'value2', :method: :post}

<%= link_to "Profile", profile_path(@profile), {param1: 'value1', param2: 'value2', method: :post} %>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.