Сообщение об ошибке Get ruby ​​rails NoMethodError в сообществах # показывать, когда я нажимаю на ссылку с домашней страницы - PullRequest
1 голос
/ 10 марта 2019

Что я пытаюсь сделать: я новичок в программировании на ruby.То, что я пытался сделать - это иметь список категорий сообществ, связанных с публикациями в этих сообществах, в моем раскрывающемся списке в виде ссылок в макете приложения.После того, как ссылки появятся в моем раскрывающемся списке ссылок, я хочу перейти к тому сообществу, в котором отображаются все сообщения, связанные с ним.

Что происходит в настоящее время? Я пробовал несколько разных вещей и искал, но не мог найти кое-что из того, что я пытался сделать, хотя я знаю, что это можно сделать.Прямо сейчас, хотя мои ссылки загружаются в подменю в макете моего приложения.когда я нажимаю на ссылку или любые другие ссылки, я получаю ошибку no method.Вот мой код ниже.

Спасибо за предоставленную помощь.

Мой фрагмент кода в application.html.erb

<li class="dropdown">
  <a href="#" class="dropdown-toggle" data toggle="dropdown">Communities</a>
  <ul class="dropdown-menu">
    <% @communities.each do |lnk| %>
      <li><%= link_to lnk.name,  community_path(lnk.id) %></li>
    <% end %>
  </ul>
</li>     
<li><%= link_to "Blog", root_path %></li>

Вот мой контроллер сообщества

class CommunitiesController < ApplicationController
  attr_accessor :name, :id

  def index
    @communities = Community.all.order('name DESC')
    render 'posts/index'
  end

  def show
    @communities = Community.find(params[:id])
    #render 'communities/show'
  end

  private 

  def community_params
    params.require(:community).permit(:name)
  end

end

Вот мой пост-контроллер Я добавил свою переменную экземпляра для сообществтам снова, так как он продолжал выдавать сообщение об ошибке

class PostsController < ApplicationController
  before_filter :authenticate_user!, except: [:idex, :show]

  def index
    @posts = Post.all.order('created_at DESC')
    @communities = Community.all.order('name DESC')
  end

  def new 
    @post = Post.new
  end

  def create
    # we will first create the post
    @post = Post.new(post_params) 
    if @post.save
      redirect_to @post
    else
      render 'new'
    end
  end

  def show
    @post = Post.find(params[:id])
  end

  def edit
    @post = Post.find(params[:id])
  end

  def update
    @post = Post.find(params[:id])
    if @post.update(params[:post].permit(:title, :body))
      redirect_to @post
    else
      render 'edit'
    end 
  end

  def destroy
    @post = Post.find(params[:id])
    @post.destroy
    redirect_to root_path
  end

  private 

  def post_params
    params.require(:post).permit(:title, :body)
  end

end

Вот моя модель

class Community < ApplicationRecord
  belongs_to :post
  has_many :post
end

здесь моя модель для сообщения

class Post <  ActiveRecord::Base
  has_many :comments, dependent: :destroy
  validates :title, presence: true, length: {minimum: 5}
  validates :body, presence: true
end

Вот мои маршруты

Rails.application.routes.draw do
  devise_for :users
  resources :posts do 
    resources :comments
  end  
  resources :communities
  root "posts#index"
  get '/about', to: 'pages#about'
end

Вот мой вывод html

<li class="dropdown">
  <a href="#" class="dropdown-toggle" data toggle="dropdown">Communities</a>
  <ul class="dropdown-menu">
    <li><a href="/communities/6">Technology</a></li>
    <li><a href="/communities/4">Sports</a></li>
    <li><a href="/communities/5">Science</a></li>
    <li><a href="/communities/3">Politics</a></li>
    <li><a href="/communities/2">Local News</a></li>
    <li><a href="/communities/1">Art</a></li>
  </ul>
</li>     
<li><a href="/">Blog</a></li>
<li><a href="/about">About</a></li>

Ответы [ 2 ]

2 голосов
/ 10 марта 2019

Это ваша проблема:

@communities = Community.find(params[:id])

И вот почему:

<% @communities.each do |lnk| %>
  <li><%= link_to lnk.name,  community_path(lnk.id) %></li>
<% end %>

find возвращает одну запись (экземпляр Community), а не коллекцию. each перебирает коллекцию.

Вы, вероятно, хотите что-то вроде этого:

@community = Community.find(params[:id])
@communities = Community.all
0 голосов
/ 11 марта 2019

Я изменил экземпляр и сделал его массивом.

<% [*@communities].each do |lnk| %>
      <li><%= link_to lnk.name,  community_path(lnk.id) %></li>
 <% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...