2016-03-29 3 views
0

Schleife auf einem Tutorial, ich kenne einige link_to Code wie folgt.Wie man meinen node.name in der list/index.html.erb

lists/index.html.erb 

<ul class="lists box"> 
<% lists.each do |list| %> 
    <li> 
     <h2 class="list_title"> 
      <%= link_to list.title, list %> 
     </h2> 
     <p> 
      <%= truncate(list.content, length: 99) %> 
      <br> 
      <%= link_to list.node.name, list.node, class: "node" %> 
     </p> 
    </li> 
<% end %> 
</ul> 

und 2 Tische

create_table "lists", force: :cascade do |t| 
    t.string "title" 
    t.text  "content" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "user_id" 
    t.integer "node_id" 
    end 

    create_table "nodes", force: :cascade do |t| 
    t.string "name" 
    t.string "summary" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

2 Modelle

class Node < ActiveRecord::Base 
    has_many :lists 
end 

class List < ActiveRecord::Base 
    belongs_to :node 
end 

Controller ist auch

class ListsController < ApplicationController 
    before_action :set_list, only: [:show, :edit, :update, :destroy] 

    def index 
    @lists = List.all.order(created_at: :desc).page(params[:page]).per(15) 
    end 

    def show 
    @list = List.find(params[:id]) 
    end 
. 
. 
. 
    private 
    def set_list 
     @list = List.find(params[:id]) 
    end 

    def list_params 
     params.require(:list).permit(:title, :content) 
    end 
end 

andere Steuerung

OK
class NodesController < ApplicationController 
    before_action :set_node, only: [:show, :edit, :update, :destroy, :node_list] 


    def index 
    @nodes = Node.all 
    end 

    def show 
    @node = Node.find(params[:id]) 
    end 
. 
. 
. 
. 

meine Routen

Rails.application.routes.draw do 
    resources :lists, only: [:index, :show, :new] 
    devise_for :users 
    resources :users 
    resources :nodes, only: [:show] 

    root 'lists#index' 
end 

Wenn ich Schienen s, bekam ich Fehler

NoMethodError in Lists#index 
Showing /Users/zhangxiaodong/workspace/listlist/app/views/lists/_list_list.html.erb where line #10 raised: 

undefined method `name' for nil:NilClass 

und wenn ich die link_to <%= link_to list.node.name, list.node, class: "node" %>-<%= link_to "list.node.name", list.node, class: "node" %> Die Seite ist, keine Fehler zu ändern, aber der Knoten. Name Link Loop nicht auf der Seite. Ich sehe API link_to [http://api.rubyonrails.org/], keine Arbeit, können Sie mir sagen, wie Schleife mein Knoten.

+0

Können Sie zeigen Deine 'routes.rb 'Dateiinhalte? – dp7

+0

Danke, ich bearbeite meine Frage. – dongdongxiao

Antwort

1

lists/index.html.erb wie folgt aussehen sollte:

<ul class="lists box"> 
    <% lists.each do |list| %> 
    <li> 
     <h2 class="list_title"> 
     <%= link_to list.title, list_path(list) %> 
     </h2> 
     <p> 
     <%= truncate(list.content, length: 99) %> 
     <br> 
     <%= link_to list.node.name, node_path(list.node), class: "node" if list.node.present? %> 
    </p> 
    </li> 
<% end %> 
</ul> 
+0

Vielen Dank. Es funktioniert und mehr simle. – dongdongxiao

0

Versuchen Sie Folgendes:

Listen/index.html.erb

<ul class="lists box"> 
<% @lists.each do |list| %> 
    <li> 
     <h2 class="list_title"> 
      <%= link_to list.title, list_path(list) %> 
     </h2> 
     <p> 
      <%= truncate(list.content, length: 99) %> 
      <br> 
      <%= link_to list.node.name, node_path(list.node), class: "node" %> 
     </p> 
    </li> 
<% end %> 
</ul> 
1

Weil Ihr list keine node haben. Ändern Sie einfach den Code ein bisschen wie dieses

Alter Code

<%= link_to list.node.name, list.node, class: "node" %> 

Neuer Code

<% if list.node %> 
    <%= link_to list.node.name, list.node, class: "node" %> 
<% end %> 
+0

Ja. Du hast recht. Tausend Dank. – dongdongxiao