Передача параметра в new_path и увеличение счетчика при создании - PullRequest
0 голосов
/ 06 мая 2020

Я недавно работал с контроллерами и маршрутизацией. Обычно, когда я пишу свои новые и создаю маршруты, это:

get '/pages/new' => 'pages#new', as: :new_page
post '/pages/ => 'pages#create'

, а действия контроллера:

def new
  @page = Page.new
end

def create
  @page = Page.new(page_params)
  if @page.save
    flash[:notice] = "Successfully created page."
    redirect_to page_path(@page) 
  else
    render action: 'new'
  end 
end

private
def page_params
    params.require(:page).permit(:book_id, :text, :page_number)
end

Так что это работает для new_page_path и post_pages_path.

Но что, если бы был new_page_path (book_id: @ book.id)? (Также страница принадлежит книге). Что это означает и как это меняет мои методы new и create? Кроме того, если бы мне пришлось создать новую страницу, как бы я изменил счетчик количества страниц в моей книге?

1 Ответ

0 голосов
/ 07 мая 2020

Я не знаю, как выглядят ваши модели, но полагаю, что у вас есть ассоциация: has_many. Если это так, вы можете использовать вложенные ресурсы в маршрутах https://guides.rubyonrails.org/routing.html#nested -resources

resources :books do
  resources :pages
end

, что дает вам always: book_id в параметрах для действий страниц. Вы можете легко создать страницу, связанную с книгой, чем:

@book = Book.find params[:book_id]
@book.pages.build(pages_params)

И вам действительно не нужно обрабатывать увеличивающееся количество при создании, если вы правильно настроили ассоциацию. book.pages.count скажет вам правду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...