【问题标题】:Rails; Get param values out of URL导轨;从 URL 中获取参数值
【发布时间】:2016-03-21 22:02:35
【问题描述】:

我创建了一个站点

本地主机:3000/仪表板

现在如果我点击这个网站上的一个项目

<%= link_to project.project_name, :project_id => project.id, :method => :post %>

我在同一个网站(我想要的)上使用 URL 中的参数

localhost:3000/dashboard?method=post&project_id=1

如果我单击项目,我将获得参数。
我在我的控制器中尝试了以下操作: @project_id = params[:project_id]

但是我得到的一切都是零类也许你们中的某个人可以帮助我

更新

控制器:

    def index 
        @project = DashboardInput.where(project_leader_id: current_employee.personal_id)
        #projects = Project.all

        project_id = 1 #value has to be changed; hard coded only for testing
        #project_id = params[:project_id]
        @selected_project = DashboardInput.find(project_id)
        @project_name = DashboardInput.find(project_id).project_name

        project_leader_id = DashboardInput.find(project_id).project_leader_id
        leader = Employee.where(personal_id: project_leader_id)
        leader_first_name = leader.pluck(:first_name)[0]
        leader_last_name = leader.pluck(:last_name)[0]
        @project_leader_for_routing = Employee.find_by personal_id: project_leader_id
        @leader_name = leader_first_name + " " +leader_last_name

        @startdate = DashboardInput.find(project_id).start_date
        @enddate = DashboardInput.find(project_id).end_date
        @cost_center = DashboardInput.find(project_id).cost_center_id
        @wbs = DashboardInput.find(project_id).wbs

        @employees_test = Employee.all

            @test_param = params[:project_id]
end


index.html

<div class="col-md-3">
<div class="row paragraphline">
    <h1>&nbsp;&nbsp;Project Status</h1>
    <h1><%= @test_param %></h1>
</div>
<div class="row showtables">
    <table id="assignments" class="display table-hover"> 
        <thead>
            <tr>
                <th>Status</th>
                <th>Project Name</th>
            </tr>
        </thead>
        <tbody>

        <% @project.each do |project| %>

            <tr>
                <% if project.project_name == "Testproject_Dashboard" %>
                    <td><div style="display:none;">3</div><%=image_tag("Ampel_Red.PNG", size: "25x25", class: "logo")%></td>
                <% elsif project.project_name == "Testproject_dashboard_2" %>
                    <td><div style="display:none;">2</div><%=image_tag("Ampel_Yellow.PNG", size: "25x25", class: "logo")%></td>
                <% else %>
                    <td><div style="display:none;">1</div><%=image_tag("Ampel_Green.PNG", size: "25x25", class: "logo")%></td>
                <% end %>
                <td><%= link_to project.project_name, :project_id => project.id, :method => :post%></td>
            </tr>

        <% end %>

        </tbody>
    </table>
</div>


路线.rb

Rails.application.routes.draw do

  resources :dashboard_inputs
  get 'delete_project_leader_status/destroy'

  get 'delete_project_leader_status/index'

  get 'delete_project_leader_status/destroy'

  get 'delete_prject_leader/destroy'

  get 'management/show'
  get 'management/wbs'
  get 'management/assignment'
  get 'management/extract'


  get 'static_pages/home'
  get 'static_pages/help'
  get 'static_pages/about'
  get 'static_pages/login'

  root 'static_pages#home'


  get 'login' => 'sessions#new'
  post 'login' =>'sessions#create'
  get 'change' =>'sessions#change_password'
  post 'change' =>'sessions#change'
  get 'logout' => 'sessions#destroy'


  get 'home' => 'static_pages#home'
  get 'functions' => 'functions#index'
  get 'cost_centers' => 'cost_centers#index'
  get 'topics' => 'topics#index'
  get 'project_statuses' => 'project_statuses#index'
  get 'providers' => 'providers#index'
  #get 'roles' => 'roles#index'
  get 'projects' => 'projects#index'
  get 'employees' => 'employees#index'
  get 'assignments' => 'assignments#index'
  post 'assignments/create' => 'assignments#before_create'
  get 'assignments/update_subprojects', as: 'update_subprojects' 
  get 'management' => 'managementshow'
  get 'dashboard' => 'management_dashboard#index'
  get 'dashboard/detail' => 'management_dashboard#detail'
  get 'pj_leader' => 'delete_project_leader_status#index'
  get 'reports' => 'reports#index'
  get 'etc' => 'reports#etc'
  get "help" => 'static_pages#help'
  get "dashboard_input" => 'dashboard_inputs'
  get "inputtest" => 'management_dashboard#input_test'

  resource :reports
  resources :bookings
  resource :delete_project_leader_status
  resources :topics
  resources :cost_centers
  #resources :roles
  resources :providers
  resource :project_statuses
  resources :assignments
  resources :employees
  resources :sub_projects
  resources :projects do
    collection { post :import }
  end
  resources :management_dashboard  
  resources :cost_centers
  resources :project_statuses
  resources :assignment_statuses
  resources :bookings do
    collection { post :import }
  end
end

【问题讨论】:

  • 显示参数值的控制台日志。
  • 您可以添加您的routes.rb 文件吗?
  • 你能补充更多关于你的问题的细节吗?
  • 能否请您添加整个控制器代码,以及视图和routes.rb 文件?
  • 您必须在您发布的代码上添加更多详细信息,如果您只发布一点代码,就很难调查。

标签: ruby-on-rails ruby


【解决方案1】:

由于您的代码中有@project_id_test,您将获得nil:NilClass。你没有定义它。

此行在您的index.html.erb 中未定义:

&lt;h1&gt;&lt;%= @project_id_test %&gt;&lt;/h1&gt;

将其更改为已定义的内容。

更新:

在您的索引控制器中,使用params[:project_id] 初始化@test_param,并且在您的dashboard#index ofcouse 的第一次加载中,params[:project_id] 未在您的URL 中的任何位置(或文本字段,如果您有)中定义。所以这会导致错误。

尝试检查params[:project_id]是否有值:

params[:project_id].nil? ? @test_param = 'something code here' : @test_params = params[:project_id]

【讨论】:

  • 不,我删除了这个和以前一样的错误,我的错误日志说这是因为行:@test_param = params[:project_id]
  • 那么,@test_param = params[:project_id] 是从哪里来的?我在您发布的代码中没有看到它?你能把代码所在的代码贴出来吗?
  • @Sherlock_Stalker 你能更详细地了解你发布的代码吗?您隐藏的代码越多,我们就越找不到您问题的答案。
  • 是的。但是:他有一个错误说params 为零。
  • 我已经尝试过你的建议@rapidmode,但它给了我同样的错误。 undefined method[]= for nil:NilClass 我用 if 语句更新了我的代码 if params[:project_id].nil? @test_param = 1 else @test_param = params[:project_id] end
猜你喜欢
  • 2012-02-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2021-08-23
相关资源
最近更新 更多