【问题标题】:Rails route for nested resource嵌套资源的 Rails 路由
【发布时间】:2016-04-05 20:46:21
【问题描述】:

在使用如下嵌套资源路由时尝试查看搜索结果时,我不断收到以下错误消息。出于某种原因,我无法让 rails 使用以下路由并在控制器中使用 redirect_to @search 调用来显示我的搜索结果。

routes.rb

resources :users do
    resources :searches
end

以下是错误

NoMethodError in SearchesController#create

undefined method `search_url' for #<SearchesController:0x007fc68a881708>

      Extracted source (around line #19):
17 @search = current_user.searches.create(search_params)
18
19  redirect_to @search
20
21 end
22

搜索控制器:

class SearchesController < ApplicationController
  before_action :require_user

  def index
  end

  def new
    # @states = ["red","green","blue"]
    @states = State.all
    @cities = City.all
    @languages = Language.all
    @search = Search.new
  end

  def create
    @search = current_user.searches.create(search_params)
    redirect_to @search
    #Old Search
    #@search = Search.create(search_params)
  end

  def show
    #@search = Search.find(params[:id])
    #@search = @user.searches.find(params[:id])
    @search = current_user.searches.find_by(id: params[:id])
  end

  #Deleting searches, tied to the "delete link" on the view
  def destroy
    @search.destroy
    flash[:success] = "Micropost deleted"
    redirect_to request.referrer || @searches
  end

  private

  def search_params
    #:userid = @user.id
    params.require(:search).permit(:searchname, :city, :min_gpa, :max_gpa, :firstname, :state, :city, :age, :gender, :universityname, :language, :livingin, :workexperience, :monthsspentabroadLiving, :monthsspentabroadworking, :degree , :degreetype, :countryofdegree, :wantstoworkin, :hasworkexperiencein, :permissiontoworkin, :currentlyemployed, :referencesuponrequest, :worktype, :charitywork)
  end
end

新的搜索表单 - 查看:

 <%= bootstrap_form_for @search, url: user_searches_path(current_user), html: {class: "pure-form"} do |s| %>

          <%= s.hidden_field :userid, :value => current_user.id %>

          <div class="field">
            <%= s.text_field :searchname, label: "Search Name" %>
          </div>

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 routing


    【解决方案1】:

    如果你做一个bundle exec rake routes,你会看到你有这条路线:

    user_search GET    /users/:user_id/searches/:id(.:format)      searches#show
    

    这是因为您的 searches 资源嵌套在 users 资源下。因此,您需要将current_user@search 传递给user_search_path 辅助方法。

    所以,重定向到用户搜索页面的正确方法是:

    redirect_to user_search_path(current_user, @search)
    

    【讨论】:

    • 很高兴我能帮上忙 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2015-06-30
    相关资源
    最近更新 更多