从select field rails中选择选项后,使用db值更新index.html

时间:2017-08-16 11:15:21

标签: ruby-on-rails ruby

我是RoR的新手,目前正在完成一些测试任务。 我需要的是从我的表单的update_date中选择select_tag,点击“显示”按钮,之后我想在同一页面上看到(“update-container”div中的index.html)相应的信息来自根据所选updated_date的数据库。我试图谷歌它以及'stackoverflowed'它,但每次我刚刚卡住更多&更多。

我的index.html.slim:

.container
    .child-container
        .show-date
            = form_tag('/show',
                method: :get,
                remote: true,
                enforce_utf8: false,
                :'data-update-target' => 'update-container',
                class: 'select_date')
                do
                    = collection_select(:id, :id, Dashboard.all, :id, :update_date)

                = submit_tag 'Show', name: nil

        #update-container

我的routes.rb:

Rails.application.routes.draw do
    resources :dashboards, only: [:index, :show]
    root to: 'dashboards#index'
end

我的dashboards_controller.rb:

class DashboardsController < ApplicationController
    def index
         @dashboards = Dashboard.all
    end
    def show
        @dashboard = Dashboard.find(params[:id])
    end
end

从那时起,我得到了“ActionController :: RoutingError(没有路由匹配[GET]”/ show“):”。

我将非常感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:0)

在您的情况下,您必须在routes.rb中使用以下代码。

get '/show', to: 'dashboard#show'

如果您使用resources :dashboards,则会自动将展示路线设为/dashboards/dashboards/:id

答案 1 :(得分:0)

总而言之,对我而言,最重要的是我在问题标题中提到的那一点。好吧,它是在许多来源写的,但我偶然发现。

我想提供适合我的解决方案(对我这样的人有帮助。)

config/routes.rb

Rails.application.routes.draw do
    resources :dashboards, only: [:index, :show] 
    get '/show', to: 'dashboards#show'
    root to: 'dashboards#index'
end

app/controllers/dashboards_controller.rb

class DashboardsController < ApplicationController
    def index
        @dashboards = Dashboard.all
    end

    def show
        @dashboard = Dashboard.find(params[:id])
        respond_to do |format|
            format.js
            format.html
            format.xml
        end
    end
end

app/views/dashboards/index.html.slim

.container
    .child-container
        .show-date
            = form_tag('/show',
                method: :get,
                remote: true,
                enforce_utf8: false,
                class: 'select_date')
                do
                = select_tag(:id, options_for_select(Dashboard.all.collect{|d| [d.update_date, d.id]}), {include_blank: true})
                = submit_tag('Show', name: nil)

        table[id="update-container"]

app/views/dashboards/_dashboard.html.slim

thead
tr
  th Carousel
  th Newbie
  th Other
tbody
  tr
      td #{dashboard.carousel_info}
      td #{dashboard.newbie}
      td #{dashboard.others}

app/views/dashboards/show.js.coffee

$('#update-container').empty()
$('<%= j(render @dashboard) %>').appendTo("#update-container")

我非常感谢所有人的帮助!我准备回答任何问题。