Как разместить экземпляры на странице без доступа к параметрам в моем методе создания?

У меня есть три модели: Subscription, Show и Episode. Роль Subscription состоит в том, чтобы анализировать ленту в столбце :url и создавать экземпляры Show и Episode, заполняя их столбцы свойствами Feedjira.

Я могу получить доступ к эпизодам, только когда перехожу к shows/1/episodes/1, использование <%= render @show.episodes %> в представлении шоу Shows не работает и не дает никаких ошибок.

В руководстве по началу работы с Rails они использовали это как свой Comment метод создания, который допускал это.

@article = Article.find(params[:article_id])
@comment = @article.comments.create(comment_params)
redirect_to article_path(@article)

Это вызвано отсутствием параметров? Если да, то как мне использовать параметры в этом методе?

def create
    @subscription = Subscription.new(subscription_params)
    if @subscription.save
        @show = Show.new
        @episodes = []

        # Feed
        @feed = Feedjira::Feed.fetch_and_parse @subscription.url

        # Show
        @show.title = @feed.title
        @show.description = @feed.description
        @show.genre = @feed.itunes_categories
        @show.url = @feed.url
        @show.logo = @feed.itunes_image

        @show.save

        # Episode
        @feed.entries.each do |item|
            @episodes.push(item)
        end

        @episodes.each do |item|
            @episode = @show.episodes.create

            @episode.title = item.title
            @episode.description = item.summary
            @episode.release_date = item.published
            @episode.show_id = @show

            @episode.save
        end
        redirect_to @subscription
    end
end

episodes/_episode.hmtl.erb

<ul>
    <li>
        <%= episode.title %>
    </li>
    <li>
        <%= episode.description %>
    </li>
    <li>
        <%= episode.url %>
    </li>
    <li>
        <%= episode.release_date %>
    </li>
    <li>
        <%= episode.show_id %>
    </li>
</ul>

shows/show.html.erb

<h1>Showing Show</h1>

<h2><%= @show.title %></h2>

<%= render @show.episodes %>

Добавление моих маршрутов и моделей на случай, если это проблема:

routes.rb

Rails.application.routes.draw do
  resources :shows do
    resources :episodes
  end
  resources :subscriptions
  root 'subscriptions#index'
end

show.rb

class Show < ActiveRecord::Base
    has_many :episodes, dependent: :destroy
end

episode.rb

class Episode < ActiveRecord::Base
    belongs_to :show
end

subscription.rb

class Subscription < ActiveRecord::Base
    validates :url, uniqueness: true
end

person Jane    schedule 12.01.2016    source источник


Ответы (1)


Кажется, вам нужно просто изменить

<%= render @show.episodes %>

to

<%= render partial: "episodes/episode", collection: @show.episodes %>

http://guides.rubyonrails.org/action_view_overview.html#partials

И небольшой совет: не размещайте свою логику в контроллере.

person Oleg    schedule 12.01.2016
comment
Это тоже не работает, к сожалению. В руководстве по началу работы они использовали только <%= render @article.comments %>, что включает эту возможность? RE: логика в моем контроллере, на днях получил противоположный совет. Я новичок в программировании, поэтому понятия не имею, кому верить... stackoverflow.com/a/34701029/5741622 - person Jane; 12.01.2016