Как вызвать js из link_to в Ruby on Rails? - PullRequest
0 голосов
/ 06 января 2019

Я хотел бы вызвать js.erb из моего link_to

Я пробовал это:

<% @categories.each do |category| %>
  <tr><td>
    <%= link_to category, :controller => "movies", :action => "show_category", :category => category, :method => :post, :remote => true%>    
  </td></tr>
<% end %>

Это мой полный routes.rb файл:

Rails.application.routes.draw do
  resources :movies
  devise_for :users
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root to: "movies#index"

  post '/movies/show_category', to: 'movies#show_category', as: 'show_movies_by_category'
end

Это моя целевая функция в movies_controller. Я бы хотел, чтобы ее вызывали при нажатии link_to (насколько я понимаю из этой функции, я мог бы вызвать show_category.js.erb файл Javascript):

def show_category
  respond_to do |format|
    format.js {render layout: false}
  end
end

Но вместо вызова movies_controller#show_category, похоже, вызывается movies_controller#show. Вот что я вижу в моей консоли Rails:

Started GET "/movies/show_category?category=Romance&method=post" for 127.0.0.1 at 2019-01-06 13:41:47 +0530
Processing by MoviesController#show as JS
  Parameters: {"category"=>"Romance", "method"=>"post", "id"=>"show_category"}
  Movie Load (0.4ms)  SELECT  "movies".* FROM "movies" WHERE "movies"."id" = ? LIMIT ?  [["id", 0], ["LIMIT", 1]]
  ↳ app/controllers/movies_controller.rb:87
Completed 404 Not Found in 6ms (ActiveRecord: 0.4ms)



ActiveRecord::RecordNotFound (Couldn't find Movie with 'id'=show_category):

app/controllers/movies_controller.rb:87:in `set_movie'

Что я здесь не так делаю?

Ответы [ 2 ]

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

Изменить на:

Просмотр:

 <% @categories.each do |category| %>
      <tr><td>
        <%= link_to show_category, :remote => true do %> 
          Show Category
        <% end %>
      </td></tr>
    <% end %>

маршруты:

  get 'show_category', to: 'movies#show_category', as: 'show_category'

Вам не нужен response_to в контроллере. Вы можете удалить все это.

Это вызовет show_category.js.erb

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

Кажется, проблема в маршрутизации. Ваш запрос "/movies/show_category/<...>" анализируется как movies/:id, а для параметра id установлено значение show_category.

Поскольку ваши movies маршруты определены как маршрут ресурса (resources movies), то способ исправить это - определить маршрут show_category как дополнительное действие в ресурсе:

resources :movies do
  post :show_category, on: :collection
end 

Кроме того, вы, кажется, не соответствует методу. Вы перечисляете действие как POST в вашем rout.rb, и все же вы создаете метод GET. Я думаю, что проблема в вашем link_to вызове: вместо method: :post вы должны написать data: { method: :post }.

Это должно исправить это. Для получения дополнительной информации см. Руководство по маршрутизации Rails , в частности, раздел Добавление действий RESTful .

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