簡體   English   中英

未定義的方法:顯示列表時的名稱(紅寶石)

[英]Undefined method :name when showing listing (ruby on rails)

我創建了一個用戶個人資料頁面,其中顯示了用戶創建的所有列表。 每個列表都有一個“顯示”鏈接,該鏈接鏈接到一個新頁面,該頁面在另一個頁面上分別顯示該列表。 我讓它適用於用戶個人資料頁面。 我正在使用此鏈接

<li><%= link_to "Show", user_listing_path(name: @user.name, id: listing.id) %></li>

但是,現在我想創建一個列表索引頁面,該頁面顯示每個用戶的所有列表。 每個列表再次應具有“顯示”鏈接,該鏈接鏈接到單獨顯示列表的頁面。 在用戶個人資料頁面上使用的同一鏈接在列表索引頁面上不起作用。

我為nil:NilClass收到以下錯誤未定義方法`name',它指向

  • <%=鏈接到“顯示”,user_listing_path(名稱:@ user.name,id:listing.id)%>
  • 有人知道為什么嗎?

    用戶顯示文件(show.html.erb)

    <div class= "showuser">
                    <div class="error-message">
          <% flash.each do |key, value| %>
            <div class="alert alert-<%= key %>"><%= value %></div>
          <% end %>
          </div>
    
    
    
    <h4>
    <%= gravatar_for @user %>
    <%= @user.name %>
    </h4>
    
    
            <div class="span 8">
                <% if @user.listings.any? %>
                <h3> Job Posts (<%= @user.listings.count %>)</h3>
                <ol class="listings">
                    <%= render @listings %>
                    <% @listings.each do |listing| %>
            <% end %>
                </ol>
                <%= will_paginate @listings %>
                <% end %>
        </div>
    </div>
    

    清單文件(_listing.html.erb)

    <li>
        <h4><%= listing.title %></h4>
        <p><%= listing.location %></h4><br>
        <span class="content"><%= listing.description %></span>
        <span class="timestamp">
            Posted <%= time_ago_in_words(listing.created_at) %> ago
        </span>
        <li><%= link_to "Show", user_listing_path(name: @user.name, id: listing.id) %></li>
        <% if current_user?(listing.user) %>
        <li><%= link_to "Edit", edit_listing_path %></li>
         <%= link_to "delete", listing, method: :delete,
                                        data: { confirm: "You sure?" },
                                        title: listing.description %>
        <% end %>
    </li>
    

    上市控制人

    class ListingsController < ApplicationController
        before_action :signed_in_user, only: [:create, :destroy, :edit, :update]
        before_action :correct_user,   only: [:destroy, :edit, :update]
    
        def create
            @listing = current_user.listings.build(listing_params)
            if @listing.save
                flash[:success] = "Job Post created"
                redirect_to current_user
                else
                    render 'listings/new'
                end
            end
    
    
    
            def edit
            end
    
        def update
            if @listing.update_attributes(listing_params)
            flash[:success] = "Listing updated"
            redirect_to @listing
        else 
          render 'edit'
        end
      end
    
            def show
                @user = User.find_by_name(params[:name])
                @listing = Listing.find_by_id(params[:id])
    
            end
    
            def new
                @listing = Listing.new
                @listings = Listing.paginate(page: params[:page])
            end
    
        def destroy 
            @listing.destroy
            redirect_to current_user
        end
    
        def index
        @listings = Listing.all
        @listings = Listing.paginate(page: params[:page])
        @user = User.find_by_name(params[:name])
        @listing = Listing.find_by_id(params[:id])
      end
    
    
    
        private 
    
    
    
        def listing_params
            params.require(:listing).permit(:description, :location, :title)
        end
    
        def correct_user
            @listing = current_user.listings.find_by(id: params[:id])
            redirect_to current_user if @listing.nil?
        end
    
    end
    

    清單顯示文件(show.html.erb)單獨顯示清單

    <div class="show_listing">
    
        <div class="col-md-6">
        <div class="col-md-6">
            <h3><%= @listing.title %></h3>
            <h3><%= @listing.location %></h3>
            <p><%= @listing.description %></p><br>
            <div class="center">
            <%= link_to "Apply Now", '#', class: "btn btn-info", data: {no_turbolink: true} %>
        </div>
        </div>
    </div>
    </div>
    
    <div class="show_link_position">
    <% if current_user == @listing.user %>
    <%= link_to 'Edit', edit_listing_path, class: "btn btn-link" %> |
    <% end %>
    <%= link_to 'Back', current_user, class: "btn btn-link" %>
    </div>
    

    列出索引文件(index.html.erb)

    <div class="top">
      <div class="categories-container">
         <div class="boxed grid-3 category-link ">
        <li><%= link_to "Find Jobs",  findjobs_path, class: "category-link"%></li>
                  <li><%= link_to "Post Jobs",  new_path, class: "category-link" %></li>
                  <li><%= link_to "Find Jobs",  findjobs_path, class: "category-link" %></li>
                  <li><%= link_to "Post Jobs",  new_path, class: "category-link" %></li>
                  <li><%= link_to "Find Jobs",  findjobs_path, class: "category-link" %></li>
                  <li><%= link_to "Post Jobs",  new_path, class: "category-link" %></li>
                  <li><%= link_to "Find Jobs",  findjobs_path, class: "category-link" %></li>
                  <li><%= link_to "Post Jobs",  new_path, class: "category-link" %></li>
            </div>
        </div>
    
    
    
    <div class="table-container">
    <div class= "grid-8 grid-moved">
      <% @listings.each do |listing| %>
    
      <h4><%= listing.title %></h4>
      <h5> <%= listing.user.name %>, Posted <%= time_ago_in_words(listing.created_at) %> ago</h5>
        <h5>Job Description:</h5>
          <p><%= listing.description %></p>
        <p>Location: <%= listing.location %></p>
        <li><%= link_to "Show", user_listing_path(name: @user.name, id: listing.id) %></li>
        <br><hr><br>
    
      <% end %>
    </div>
    </div>
    
    
    <div class="container">
      <div class="pagination">
        <%= will_paginate @listings %>
      </div>
    </div>
    

    路線

    Rails.application.routes.draw做資源:用戶資源:會話,僅:[:新,:創建,:毀滅]資源:列表

    根'static_pages#home'

      match '/signup',  to: 'users#new',            via: 'get'
      match '/signin',   to: 'sessions#new',          via: 'get'
      match '/signout', to: 'sessions#destroy',     via:'delete'
      match '/help',      to: 'static_pages#help',    via: 'get'
      match '/contact',   to: 'static_pages#contact',  via: 'get'
      match '/about',     to: 'static_pages#about',   via: 'get' 
      match '/new',     to: 'listings#new',   via: 'get' 
      match '/users/:name/:id', to: 'listings#show', via: :get, as: :user_listing
      match '/findjobs',     to: 'listings#index',   via: 'get' 
    

    讓我知道是否放棄任何重要信息。

    您尚未在控制器中定義@user

    在下一行中,您將適當地訪問列表用戶,如下所示: <% if current_user?(listing.user) %>

    您只需要調整代碼即可:

    <li><%= link_to "Show", user_listing_path(name: listing.user.name, id: listing.id) %></li>

    說得通?

    嘗試:

    <li><%= link_to "Show", user_listing_path(@user, listing) %></li>
    

    在您的控制器上:

    def show 
      @user = User.find(params[:id)
      @listing = Listing.find(params[:id])
    end
    

    暫無
    暫無

    聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM