Rails Ajax ActionController ::允许参数:false

时间:2018-07-10 10:23:59

标签: ruby-on-rails ajax

我正在尝试进行Ajax调用,以在单击链接时返回我的所有评论。当我单击链接时,我正在调用传递参数的User模型方法,并且收到此错误Lorem ipsum $5000 dolor sit amet consectetur adipisicing elit. Obcaecati tempora dolorum repellat reiciendis cum soluta deserunt ex voluptatibus, nam illum veniam £5550 quidem aperiam sequi, nostrum sed? Quidem eveniet maiores #5550 autem. https://codepen.io/pen/5000/3454

我的user_controller:

<ActionController::Parameters {"controller"=>"users", "action"=>"show_all_reviews"} permitted: false>

这是我执行Ajax调用的按钮 class UsersController < ApplicationController def show @user = User.find(params[:id]) @my_reviews = @user.my_reviews.where.not(comment: [nil, ""]) @my_reviews = @my_reviews.paginate(:page => params[:page], :per_page => 1) @friends = @user.get_friends_list end def show_all_reviews @user = User.find(params[:user_id]) @my_reviews = @user.my_reviews.where.not(comment: [nil, ""]) end private def user_params params.require(:user).permit(:description, :phone) end end

还有我的jquery函数:

<%= link_to 'Mostrar todos los comentarios', '#', remote: true, id: 'show_more_link', data: {user: @user.id} %>

我将此添加到route.rb

$('#show_more_link').on('click', function(event) {
  event.preventDefault();
  var user_id = $(this).data("user");
  console.log(user_id);
  $.ajax({
    url: "/show_all_reviews",
    type: "POST",
    data: {
      "user_id": user_id,
    },
    dataType: "json",
    success: function(data) {
      alert('done');
    }
  });
});

2 个答案:

答案 0 :(得分:0)

您犯了一个错误。在ajax代码中将类型更改为GET。正如我在您的路线中看到的那样,使用GET类型的自定义操作。

或者您也可以在此处修改方法。使用名称空间。 在您的route.rb中添加:

namespace :users, path: nil, as: nil do
  resources :users, only: [] do
    resources :reviews, only: :index
  end
end

在控制器/ users下创建新文件夹。在此处添加新控制器:

controllers / users / reviews_controller.rb

 class Users::ReviewsController < ApplicationController
   def index
    @user = User.find(params[:user_id])
    @reviews = @user.my_reviews.where.not(comment: [nil, ""])

    render json: @reviews
   end
 end

内部视图文件:

 <%= link_to 'reviews', user_reviews_path(user), remote: true %>

答案 1 :(得分:0)

您不需要使用$.ajax()。这可以通过简单的方式完成:-

路线:-

get '/show_all_reviews/:user_id', to: 'users#show_all_reviews', as: :show_all_reviews

添加link_to的路径,包括远程:true

<%= link_to 'Mostrar todos los comentarios', show_all_reviews_path(user_id: @user.id), remote: true, id: 'show_more_link' %>