রেল 4 - আংশিক থেকে চলক পাস


125

আমি রুবি অন রেলস টিউটোরিয়াল অনুসরণ করছি এবং পার্টিয়ালগুলিতে ভেরিয়েবলগুলি পাস করার চেষ্টা করার সময় একটি সমস্যা পেয়েছি।

আমার _userআংশিকটি নিম্নরূপ

<li>
  <%= gravatar_for user, size: 52 %>
  <%= link_to user.name, user %>
</li>

আমি আকার মানের জন্য একটি নম্বর পাস করতে চাই। আমি কোন ভাগ্য ছাড়াই নীচে হিসাবে চেষ্টা করছি।

<%= render @users, :locals => {:size => 30} %>

উত্তর:


162

আপনি যদি স্থানীয়দের পাশ কাটিয়ে থাকেন তবে আপনার পুরো রেন্ডার আংশিক বাক্য গঠন প্রয়োজন

<%= render @users, :locals => {:size => 30} %>

হয়ে

<%= render :partial => 'users', :collection => @users, :locals => {:size => 30} %>

অথবা নতুন হ্যাশ সিনট্যাক্স ব্যবহার করতে

<%= render partial: 'users', collection: @users, locals: {size: 30} %>

যা আমি মনে করি অনেক বেশি পঠনযোগ্য


ধন্যবাদ @ জেমসও, তবে চিত্রগুলি এখনও 52 মাপের আকারের I
dopplesoldner

1
হ্যাঁ আসলে, আপনি আকারের পূর্বের মানটিকে ওভাররাইড করছেন।
অক্ষয় বিষ্ণোই

3
এর localsমতো সংক্ষিপ্ত সংস্করণটি ব্যবহার করতে আপনি হ্যাশটি বাদ দিতে পারেন:<%= render @users, size: 30 %>
পেড্রো অ্যাডাম ভার্গারা

177

পাগল নেভিগেশন API থেকে PartialRender :

ডিফল্ট কেস রেন্ডারিং

আপনি যদি সংগ্রহ বা লেআউটগুলির মতো কোনও বিকল্প ব্যবহার করতে যাচ্ছেন না, আপনি পার্টিয়ালগুলি রেন্ডার করতে রেন্ডারের শর্ট হ্যান্ড ডিফল্টও ব্যবহার করতে পারেন।

উদাহরণ:

# Instead of <%= render partial: "account" %>
<%= render "account" %>

# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render "account", account: @buyer %>

# @account.to_partial_path returns 'accounts/account', so it can be used to replace:
# <%= render partial: "accounts/account", locals: { account: @account} %>
<%= render @account %>

# @posts is an array of Post instances, so every post record returns 'posts/post' on `to_partial_path`,
# that's why we can replace:
# <%= render partial: "posts/post", collection: @posts %>
<%= render @posts %>

সুতরাং, আপনি নীচে sizeরেন্ডার করতে স্থানীয় একটি চলক পাস ব্যবহার করতে পারেন :

<%= render @users, size: 50 %>

এবং তারপরে এটি _user.html.erbআংশিকভাবে ব্যবহার করুন :

<li>
    <%= gravatar_for user, size: size %>
    <%= link_to user.name, user %>
</li>

size: sizeসমান যে নোট :size => size


14
দ্বিতীয় রেন্ডার, স্থানীয় লোকজন ছাড়া আমার জীবন বাঁচিয়েছিল। ধন্যবাদ
ক্যাসিওস্ক্যাব্রাল

6

উভয় ক্ষেত্রেই

render partial: 'user', locals: {size: 30}

অথবা

render 'user', size: 30

ব্যবহার করতে locals, আপনি প্রয়োজন partialpartialযুক্তি ব্যতীত , আপনি কেবল চলকগুলি সরাসরি তালিকাভুক্ত করতে পারেন (এর মধ্যে নয় locals)


5

ব্যবহার করবেন না locals4.2+ রেলগুলিতে

4.2 রেলগুলিতে আমাকে অপসারণ করতে হয়েছিল locals অংশটি এবং কেবল ব্যবহার করতে হয়েছিলsize: 30 পরিবর্তে করতে হয়েছিল। অন্যথায়, এটি স্থানীয় ভেরিয়েবলটি সঠিকভাবে পাস করবে না।

উদাহরণস্বরূপ, এটি ব্যবহার করুন:

<%= render @users, size: 30 %>

3

আপনি যদি রেন্ডার করতে জাভাস্ক্রিপ্ট ব্যবহার করেন তবে ব্যবহার করুন escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");


1

সিন্ট্যাক্টিকভাবে কিছুটা আলাদা তবে এটি আমার মতে আরও পরিষ্কার দেখাচ্ছে:

render 'my_partial', locals: { title: "My awesome title" }

# not a big fan of the arrow key syntax
render 'my_partial', :locals => { :title => "My awesome title" }

1

আপনি আংশিকর উপর রেন্ডার ফাংশনটি কল করার পরে আপনি স্থানীয় ভেরিয়েবলগুলি তৈরি করতে সক্ষম হবেন, সুতরাং আপনি যদি কোনও আংশিক কাস্টমাইজ করতে চান তবে উদাহরণস্বরূপ আংশিক রেন্ডার করতে পারেন _form.html.erb:

<%= render 'form', button_label: "Create New Event", url: new_event_url %>
<%= render 'form', button_label: "Update Event", url: edit_event_url %>

আপনি বোতাম এবং URL টির জন্য লেবেলের আংশিকভাবে অ্যাক্সেস করতে পারেন, যদি আপনি কোনও রেকর্ড তৈরি বা আপডেট করার চেষ্টা করেন তবে সেগুলি আলাদা। অবশেষে, এই স্থানীয় ভেরিয়েবলগুলিতে অ্যাক্সেসের জন্য আপনাকে আপনার কোড local_assigns[:button_label]( local_assigns[:name_of_your_variable]) লাগাতে হবে

<%=form_for(@event, url: local_assigns[:url]) do |f|  %>
<%= render 'shared/error_messages_events' %>
<%= f.label :title ,"Title"%>
  <%= f.text_field :title, class: 'form-control'%>
  <%=f.label :date, "Date"%>
  <%=f.date_field :date, class: 'form-control'  %>
  <%=f.label :description, "Description"%>
  <%=f.text_area :description, class: 'form-control'  %>
  <%= f.submit local_assigns[:button_label], class:"btn btn-primary"%>
<%end%>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.