أوامر كونسول Rails

لقد وجدت وحدة تحكم Rails وعلمت أنه يمكنك القيام بسحر أسود مثل:\n\n```sql
UPDATE topics
SET title = ‘psql redo!’
WHERE id = 886
SQL

إعجاب واحد (1)

تحتاج حقًا إلى التعرف على Rails وعدم تعديل قاعدة البيانات هذه مباشرة. ما فعلته هو العثور على كتاب عن Rails وقراءته. وفي مرحلة ما، نظرت أيضًا في كتاب عن Ruby. أنا كبير بما يكفي لأتذكر عندما كانت الكتب هي الطريقة الوحيدة للتعلم عن أجهزة الكمبيوتر. على حد فهمي، هناك العديد من المواقع على الإنترنت التي يمكن أن تقدم لك برنامجًا تعليميًا لـ Rails. أعتقد أن هناك طريقة يمكنك من خلالها البحث في الإنترنت للعثور عليها.

إليك واحد وجدته

إليك كيفية تحديث الأشياء باستخدام Rails، ولكن قراءة أحد هذه الأدلة ستعطيك فكرة سريعة عن كيفية عملها.

t=Topic.find(123)
t.title='my new title'
t.save

# أو
t.update(title: 'my new title')

عندما تفعل الأشياء من خلال Rails، فإنها تجري الكثير من عمليات التحقق إذا كانت هناك أشياء. هذه الأشياء عادةً ما تمنعك من ارتكاب أخطاء فادحة. ربما لا يجب عليك كسر هذه القواعد حتى تفهمها.

على سبيل المثال، إذا كنت تريد أن ينشئ المستخدمون مواضيع في فئة معينة عبر واجهة برمجة التطبيقات (API)، فيجب أن يكون لديهم الحقوق لإنشاء موضوع في تلك الفئة. إذا كنت تريد حقًا أن يوجد موضوع تم إنشاؤه بواسطة مستخدم في فئة لا يملك حقوقًا فيها، فقم بإنشائه إذا كان في فئة أخرى ثم اجعل مسؤولًا ينقله (أو قم بذلك عبر Rails، والذي لن يفرض أذونات الفئة).

8 إعجابات

وحدة تحكم Rails تتحدث لغة روبي.

بما أن Discourse مفتوح المصدر، يمكنك تعلم البرمجة منخفضة المستوى من خلال قراءة الكود المصدري على GitHub.

إعجاب واحد (1)

t=Topic.find(123)
t.title=‘my new title’
t.save

أو

t.update(title: ‘my new title’)

شكرًا. الشيء الوحيد الذي لم أتمكن من تحديده هو كيفية تعيين قيمة بقيمة مسحوبة من مكان ما على سبيل المثال

t.update(title: topic2.find(123).title)

إعجاب واحد (1)

يمكنك القيام بشيء مثل:

t = Topic.find(123)
t.update(title: Topic.find(124).title)

ولكن هذا أكثر إزعاجًا مما يستحق. يمكنك القيام بالأشياء على مراحل:

t1 = Topic.find(123)
t2 = Topic.find(124)
t1.update(title: t2.title)
3 إعجابات

وأنا أيضاً: About this Book :: Why's (Poignant) Guide to Ruby

5 إعجابات

على الرغم من أن هذا يمكن أن يتسبب بسهولة في حدوث استثناء (والذي يُنصح باستعادته)، فقد ترغب في استخدام find_by كبديل والذي سيعيد nil بدلاً من إثارة استثناء، اعتمادًا على كيفية رغبتك في إدارة الأمور.

4 إعجابات

رجل. لطالما اعتقدت أن RoR كان بقايا من العقد الأول من القرن الحادي والعشرين، ولم أتخيل أبدًا أن أجد نفسي أتعلم هذا! :slight_smile:

إعجاب واحد (1)

SQL هي بقايا من الستينيات. :winking_face_with_tongue:

إعجاب واحد (1)

“Niche” تدفع الفواتير!

3 إعجابات

أنا في الواقع أستخدم الذكاء الاصطناعي لكتابة استعلامات SQL. يمكنه القيام بذلك أسرع بكثير مني!

هذه هي الطريقة التي تشابهنا بها. احتجت إلى القيام ببعض استعلامات SQL مع ربط داخلي معقد وآخر مع اتحاد بسيط ساعدني الذكاء الاصطناعي في إنجازه. كنت أتساءل لو أنني انتبهت أكثر في فصل قواعد البيانات عام 1986 لكنت عرفت كيف أفعل ذلك. :rofl:

لماذا لا تجعل الذكاء الاصطناعي يكتب لك أوامر Rails؟

بالنسبة للاستعلامات القياسية للاختيار، والشرط، والفرز، والحد، أكتبها بنفسي، ولكن أي شيء أكثر تعقيدًا، أسأل الذكاء الاصطناعي الآن. سألت الذكاء الاصطناعي:

اكتب استعلامًا يعرض فئة ثم يسرد أفضل 5 بادئي مواضيع لتلك الفئة وعدد المواضيع التي بدؤوها

وفورًا أعطاني (هذه قاعدة بيانات غير Discourse):

WITH TopTopicStarters AS (
    SELECT
        c.id AS category_id,
        c.name AS category_name,
        u.name AS user_name,
        COUNT(t.id) AS num_topics_started,
        ROW_NUMBER() OVER(PARTITION BY c.id ORDER BY COUNT(t.id) DESC) AS rank
    FROM topics t
    JOIN categories c ON t.category_id = c.id
    JOIN users u ON t.user_id = u.userid
    GROUP BY c.id, u.name
)

SELECT 
    c.category_name,
    tts.user_name,
    tts.num_topics_started
FROM categories c
JOIN TopTopicStarters tts ON c.id = tts.category_id
WHERE tts.rank <= 5;

لا توجد طريقة كنت لأتوصل إلى ذلك دون الكثير من البحث على جوجل والتجربة والخطأ!

هناك العديد من الأمثلة في المكوّن الإضافي لاستكشاف البيانات والفئة.

إعجابَين (2)