Создайте веб-сайт и дочернюю страницу одновременно в Rails 5

#ruby-on-rails #ruby-on-rails-5

#ruby-on-rails #ruby-on-rails-5

Вопрос:

На моей домашней странице я пытаюсь настроить ее так, чтобы при нажатии кнопки «Начать» создавалась запись веб-сайта, но также создавалась страница, принадлежащая этому веб-сайту, и вы перенаправлялись на страницу.

Это то, что у меня есть до сих пор. Создается запись веб-сайта, но страница не создается.

Модели

 class Page < ApplicationRecord
    belongs_to :website
end

class Website < ApplicationRecord
    has_many :pages, :dependent => :destroy

    accepts_nested_attributes_for :pages
end
  

Контроллер домашней страницы

 class MarketingPagesController < ApplicationController
    def home
        @website = Website.new
        @website.pages.build
    end
end
  

Контроллер веб-сайта

 class WebsitesController < ApplicationController
    def create
        @website = Website.new(creation_params)

        if @website.save
            redirect_to @website.Page.first
        else
            render :new
        end
    end

private

    def shared_params
        [:name]
    end

    def creation_params
        params.require(:website).permit(*shared_params)
    end

    def update_params
        params.require(:website).permit(*shared_params)
    end
end
  

Контроллер страницы

 class PagesController < ApplicationController

    def create
        @page = Page.new(creation_params)

        if @page.save
            redirect_to @page
        else
            render :new
        end
    end

    def show
        @page = Page.find(params[:id])
        @templates = Template.all
    end

private

    def shared_params
        [:name, :website_id]
    end

    def creation_params
        params.require(:page).permit(*shared_params)
    end

    def update_params
        params.require(:page).permit(*shared_params)
    end
end
  

Форма веб-сайта на главной странице

 <%= form_for @website do |f| %>
    <%= f.hidden_field :name, value: "Untitled site" %>
    <%= f.fields_for :pages do |builder| %>
        <%= builder.hidden_field :name, value: "Untitled page" %>
    <% end %>
    <%= f.submit "Create Website" %>
<% end %>
  

Ответ №1:

Вы неправильно используете ассоциацию

 # Change
@website.Page.first
# to
@website.pages.first
  

Измените этот фрагмент в WebsiteController

 if @website.save
  redirect_to @website.pages.first
else
  render :new
end
  

Комментарии:

1. Извините, я отредактировал вопрос, чтобы включить форму отправки. Запись страницы не создается.

Ответ №2:

у вас нет page параметров в website controller белом списке. измените свой shared_params в website controller на :

 def shared_params
  [:name, pages_attributes: [:id, :name]]
end
  

и, конечно, внесите изменения, предложенные @Deepak

Комментарии:

1. Спасибо, я внес эти изменения сейчас, но я все еще получаю сообщение об ошибке.

2. Я не уверен, как найти ошибку? Могу ли я посмотреть где-нибудь в консоли?

3. Да, если это не вызывает никакой ошибки, тогда загляните в журнал в консоли сервера, вы можете узнать, что происходит.

4. возможно, вам также придется внести их в белый список id .