Как отправить данные на другой контроллер без метода GET по ссылке? - PullRequest
0 голосов
/ 07 января 2019

Я использую Rails 5.2.2. У меня есть users, authors и books таблицы. Каждый пользователь может видеть только записи, которые были сохранены им самим.

Таблица книг имеет внешние ключи user_id и author_id. Мне нужно сохранить эти данные автоматически.

В моем файле books_controller.rb я создал метод set_defaults для автоматического добавления этих данных, например,

def set_defaults
  params[:book][:user_id] = current_user.id
end

С user_id проблем нет, но я не знаю, как получить доступ к идентификатору автора.

Я добавил ссылку под authors#show страницей и хочу добавить книгу к автору, используя эту ссылку.

Так как я могу получить author_id безопасным способом?

<a href="<%= new_author_book_path(@author) %>" class="btn btn-block btn-info" style="color: white">Add a Book</a>

Это перенаправляет на http://localhost:3000/authors/8/books/new

Я не хочу использовать идентификатор из ссылки и не хочу использовать метод get. Я только хочу использовать ссылку (Добавить книгу), чтобы сохранить книгу. Как я могу передать объект этого автора контроллеру?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

В вашей HTML-форме:

<%= form_for [@author, @book] do |f| %>
  # Your Book fields here
<% end %>

В вашем контроллере (без гема авторизации)

class AuthorsController < ApplicationController
  def show
    @author = current_user.authors.find(params[:id])
  end

  def create 
    @author = current_user.authors.find(params[:id])
    @book = Book.new(book_params)
    if @book.save
      # handle save 
    else
      # handle error
    end
  end 

  private 

  def book_params
    params.require(:book).permit(:title .....)  
  end
end
0 голосов
/ 07 января 2019

Хорошо, я нашел решение, но я не уверен, что это хорошая практика. Любые лучшие решения будут оценены.

Я создал глобальную переменную в авторе show.html.erb Страница:

$current_author = @author

И я использовал это в books_controller.rb

params[:book][:author_id] = $current_author.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...