2016-03-29 2 views
0

В одном учебнике я знаю код link_to, подобный этому.Как связать мой node.name в списке/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> 

и 2 таблицы

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 модели

class Node < ActiveRecord::Base 
    has_many :lists 
end 

class List < ActiveRecord::Base 
    belongs_to :node 
end 

контроллеры также хорошо

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 

другой контроллер

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 
. 
. 
. 
. 

мои маршруты

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

    root 'lists#index' 
end 

Когда я Перила с, я получил ошибку

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 

и при изменении link_to <%= link_to list.node.name, list.node, class: "node" %> к <%= link_to "list.node.name", list.node, class: "node" %> страница ошибки нет, но узел. имя ссылки не на странице. Я смотрю API link_to [http://api.rubyonrails.org/], нет работы, можете ли вы рассказать мне, как цикл мой узел.

+0

Можете ли вы показать ваш 'routes.rb 'содержимое файла? – dp7

+0

спасибо, я редактирую свой вопрос. – dongdongxiao

ответ

1

lists/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" if list.node.present? %> 
    </p> 
    </li> 
<% end %> 
</ul> 
+0

Большое спасибо. Он работает и еще больше. – dongdongxiao

0

Попробуйте следующее:

списки/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

Поскольку ваш list не может иметь каких-либо node. Просто измените код немного, как этот

Старый код

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

Новый код

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

Да. Ты прав. Бесконечно благодарен. – dongdongxiao

Смежные вопросы