ruby-on-rails - 嵌套资源的 Rails 路线

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 routes

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

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

搜索 Controller :

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>

最佳答案

如果您执行捆绑 exec rake 路线,您将看到您有以下路线:

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)

关于ruby-on-rails - 嵌套资源的 Rails 路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34553877/

相关文章:

PHP 包含在 Ruby on Rails 中吗?

ruby - 为将文件作为输入的代码编写测试

javascript - Mechanize 卡在 Javascript 重定向页面上

jquery - Rails jQuery UJS 回调未触发

ruby-on-rails - 如何将重音字符与正则表达式匹配?

javascript - 如何在javascript中设置rails背景图片url?

ruby-on-rails - Ruby 中属性和 base_attributes 之间的区别?

ruby - 如何像在 Prime 类中一样在 Ruby 中创建默认实例?

ruby - 查询具有大小的 Mongo 嵌入式文档

ruby-on-rails-3 - 如果 <dd> 元素的内容为空,为什么使用 twitter bootstrap 2 标签和数据的显示不对齐?