RR المعلومات اللازمة في ways.rb

سؤالي هو معرفة المزيد عن الموارد والتوجيه. تابعت روبي على كتاب تعليمي القضبان وبدأت في تخصيص طلبي. في طلبي ، أريد أن أطلب من المستخدم إرسال بريد وآخرون يناقشون حول هذا الموضوع عن طريق إرسال الصور. أنا خلقت المستخدمين دون أي مشكلة. في الصفحة الرئيسية ، أريد عرض جميع مشاركات المستخدمين حسب التاريخ. نموذج المواضيع هو

class Topic < ActiveRecord::Base

  attr_accessible :content, :title
  belongs_to    :user
  has_many      :posts
  validates :title, presence: true, length: { maximum: 140 }
  validates :content, presence: true
  validates :user_id, presence: true
  default_scope order: 'topics.created_at DESC'
end

نموذج المشاركات هو:

class Post < ActiveRecord::Base
  attr_accessible :content 
  belongs_to :topic
  belongs_to :user
  validates :user_id, presence: true
  validates :content, presence: true
  default_scope order: 'posts.created_at DESC'
end

والترحيل هو:

      create_table "topics", :force => true do |t|
        t.string   "title"
        t.text     "content"
        t.datetime "created_at", :null => false
        t.datetime "updated_at", :null => false
        t.integer  "user_id"
      end

  add_index "topics", ["user_id", "created_at"], :name => "index_topics_on_user_id_and_created_at"

موضوعاتي:

class TopicsController < ApplicationController
  before_filter :signed_in_user, only: [:create, :destroy]
  before_filter :correct_user, only: :destroy

    def show
        @topic = Topic.find(params[:id])
        @posts = @topic.posts.paginate :page => params[:page], :per_page => 20
    end

هذه هي مساراتي. rb:

MyPedia::Application.routes.draw do
    resources :users
    resources :sessions, only: [:new, :create, :destroy]
    resources :topics, only: [:show, :create, :destroy]
    resources :posts
    root to: 'static_pages#home'

    match '/topicin/:id',   to: 'topics#show'

my show.html.erb هو

<div class ="center">

<%= @topic.title %>

  
<% if  @posts %>
  <% for post in @posts do %>  
    
<%= post.content %> <% end %> </div> <%end %>

جدول مسارات أشعتي هي مثل ذلك:

     topics POST   /topics(.:format)         topics#create
      topic GET    /topics/:id(.:format)     topics#show
            DELETE /topics/:id(.:format)     topics#destroy
      posts GET    /posts(.:format)          posts#index
            POST   /posts(.:format)          posts#create
   new_post GET    /posts/new(.:format)      posts#new
  edit_post GET    /posts/:id/edit(.:format) posts#edit
       post GET    /posts/:id(.:format)      posts#show
            PUT    /posts/:id(.:format)      posts#update
            DELETE /posts/:id(.:format)      posts#destroy

. يمكنني رؤية موضوعاتي في الصفحة الرئيسية كقائمة روابط دون أي مشكلة. عندما أضغط عليها أريدهم أن يطلعوني على الموضوع والمشاركات التي بداخلها.  عندما أستخدم localhost: 3000 هذا هو ما أحصل عليه الآن.

No route matches {:action=>"show", :controller=>"topics", :id=>#}

عندما أستخدم localhost: 3000/topics/1

SQLite3::SQLException: no such column: posts.topic_id: SELECT  "posts".* FROM "posts"  WHERE "posts"."topic_id" = 1 ORDER BY posts.created_at DESC LIMIT 20 OFFSET 0

لذلك قرأت التعليمات ، لكنني لا أستطيع العثور على طريقة لاستخدام المواضيع بشكل مباشر. آسف لسؤال طويل.هذا سوف يساعدني على فهم العديد من الأسئلة حول القضبان.

تعديل 1: أضف topic_id إلى جدول المشاركات ... وحدة التحكم static_pages هي:

class StaticPagesController < ApplicationController
  def home
    @topic = current_user.topics.build if signed_in?
        @topics = Topic.paginate :page => params[:page], :per_page => 20
  end

والخطأ هنا في _topics.html.erb:

 <% for topic in @topics do %>  
!!!!!  
  • <%=link_to topic.title, topicin_path(@topic) %>
  •   
    
     <%= will_paginate @topics %>
    <% end %>  
    
    1

    2 إجابة

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

    أنت أيضًا بحاجة إلى topic_id في posts لأن لديك belong_to: topic في نموذج نشر . ألقِ نظرة على الترحيل من أجل posts ، وقم بإنشاء الترحيل المناسب و rake db: migrate .

    أخيرًا ، لا أظن أن user يحتاج إلى موضوعات ، أو نشر موضوع ، أو مستخدم. يمكنك بعد ذلك استدعاء @ user.posts.topic و themes.first.posts.first.user .

    حظا طيبا وفقك الله.

    0
    وأضاف
    سأحاول إدارة المواضيع والمشاركات الآن. في الواقع أريد من المستخدم إنشاء موضوع وكتابة مشاركة عنه (العنوان والمحتوى) ، في وقت لاحق يمكن للمستخدمين الآخرين الإجابة عن طريق الرسائل فقط (المحتوى).
    وأضاف المؤلف ytsejam, مصدر

    حيث يبدو أنك تستخدم سمات متداخلة ولكنك لا تستخدم موارد المسارات المتداخلة ؛ لذلك فإن المسارات تولد القيمة لكل موضوع بدلاً من الموضوعات لكل مشاركة.

    يمكنك القيام بذلك بسهولة باستخدام طريقة المورد

    resource :posts do 
      resource :topics
    end
    

    أو مثل Wawa Loo قال يجب عليك أن تمر في قيم العلاقة

    also for your error SQLite3::SQLException: no such column: posts.topic_id: SELECT "posts".* FROM "posts" WHERE "posts"."topic_id" = 1 ORDER BY posts.created_at DESC LIMIT 20 OFFSET 0

    عندما تقوم بإنشاء has_many أو أي علاقة تحتاج إلى تعيين قيمة العلاقة في db ، لذلك عندما تكون على معرف المعرف 1 وتريد تحميل الردود التي سيقوم الاستعلام ببحثها عن الرد الذي يساوي post_id 1. لذا تأكد من شغّل الترحيل لإضافة سمة العلاقة هذه

    تحية طيبة،

    0
    وأضاف
    بدأت في إعادة كل هجرة مرة أخرى .. سأحاول أن أجعل ترميزًا نظيفًا مع العلاقات.
    وأضاف المؤلف ytsejam, مصدر
    لا أقترح إعادة كتابة عمليات الترحيل الاستكشافية ولكن بدلاً من ذلك أضف أو أزل سمات جديدة مثل أعمدة العلاقات ، وإلا فقد تفقد المسار وتعثرت في مكان ما (من التجربة) فقط جرّب ترحيلًا جديدًا لضبط قاعدة بياناتك
    وأضاف المؤلف dennis, مصدر