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