سؤال

مرحبًا ، أريد أن أقوم بذلك بالقول إنني جديد في الترميز.

لدي مشكلة أعتقد أنه يمكن حلها بطريقتين

أ. من خلال تقديم جزئي

ب. من خلال تحديث وحدة التحكم

(يمكن أن أكون مخطئًا تمامًا ولكن هذه هي ما أظن لول)

لديّ وحدة تحكم/طرق عرض "مراجعات" و "سجلات". وأريدهم أن يظهروا على نفس الصفحة.

كيف يمكنني أن أفعل هذا؟ حاولت تقديم جزئي لكني أحصل على خطأ.

وحاولت قطعة الكود أدناه:

مما جعل مراجعاتي تظهر على الصفحة ، ولكن عندما أضيف

@log = @user.logs.all 

لذلك ، لا يسحب جميع السجلات إلى الصفحة كما تفعل للمراجعات.

def show
  @user = User.find_by_name(params[:id])
  if @user 
    @reviews = @user.reviews.all
    render action: :show
  else
    render file: 'public/404', status: 404, formats: [html]
  end
end
هل كانت مفيدة؟

المحلول

اهم الاشياء اولا. وجهات النظر تشير إلى الإجراءات في وحدات التحكم. لذلك يمكن أن يكون هناك عدة طرق عرض لكل وحدة تحكم أو حتى لا شيء.

لذا ، إذا كنت تريد تقديمها @reviews و @logs في نفس الصفحة ، يجب عليك أولاً إنشاء متغيرات المثيل في نفس الإجراء ثم تقديم كلا الجزئيين في نفس الإجراء. كيف تفعل ذلك؟ سهل. أولاً ، وصلت إلى وحدة التحكم التي عرضتها للتو وتعديل ذلك show عمل.

def show       
  # You can set the variable in the if-clause 
  # And you also need to use static finders with a hash as an argument in Rails4
  if (@user = User.find_by(name: params[:id]))
     @reviews = @user.reviews.all 
     @logs = @user.logs.all
  # You don't need to call render explicitly 
  # if you render the view with the same name as the action 
   else
     render file: 'public/404', status: 404, formats: [html]
   end     
end

ثانياً: تذهب إلى /app/views/reviews/show.html.erb قالب ووضع كلا الجزئيين هناك مثل هذا (هذا مجرد مثال ، اضبط العلامات الخاصة بك لتناسب احتياجاتك).

<h1> Reviews and Logs</h1>
<div id="reviews_part">
 <%= render @reviews %>
</div>
<div id="logs_part">
  <%= render @logs %>
</div>

الآن قم بإنشاء 2 جزئيين /app/views/reviews/_review.html.erb و /app/views/logs/_log.html.erb ووضع كل العلامات المطلوبة هناك (استخدم المتغيرات العادية review و log للتمثيل الكائنات المتكررة). سوف القضبان التلقائي تكرار تلك الجزئية عدة مرات حسب الحاجة.

أو يمكنك استدعاء العرض الجزئي بشكل واضح

<div id="reviews_part">
  <% @reviews.each do |review| %>
   <%= render review %> 
        which is the same as
   <%= render partial:"reviews/review", locals:{review:review} %>
  <% end %>
</div>

نصائح أخرى

هذه هي طريقة تقديم الجزارات إلى وجهات نظر في هامل:

=render :partial => "header"
%h2 Hello World
=render :partial => "footer"

كل جزء تقوم به بهذه الطريقة ، يجب إنشاء داخل نفس المجلد. يجب أن يبدأ اسم كل جزء مع السطح السفلي (_). يجب أن يكون هذا هو دليل العرض:

- home
    - index.html.haml
    - _header.html.haml
    - _footer.html.haml
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top