2014-10-18 63 views
1

我試圖從視圖傳遞一個變量到控制器。但是,即使包含了,控制器參數也不包含參數。有人可以爲我檢查嗎? 感謝無法從視圖到控制器捕獲變量傳遞? Rails 4

show.html.erb

<div class="col-xs-8"> 
    <p id="notice"><%= notice %></p> 

    <p> 
     <%= image_tag @post.avatar_url(:thumb).to_s %> 
     <br> 
     <strong>Tag:</strong> 

     <%= @post.tag %> 

    </p> 
    <%= button_to "Add New Version", versions_path(:pid => "123"), :class => "btn btn-default", :method => :get %> 
    <%= link_to 'Edit', edit_post_path(@post) %> | 
    <%= link_to 'Back', posts_path %> 

</div> 

我試圖點擊該網頁上添加新的版本... ...,它會去版本#指數

,所以這是我的版本索引。

class VersionsController < ApplicationController 
    layout "loginpage" 
    #before_action :set_version, only: [:show, :edit, :update, :destroy] 

    def index 
    @heading = "Add new version" 
    @effect = Effect.new 
    p "hello world" 
    p params 
    p params[:pid] 
    p @effect 
    p "hello owlrd" 

我試圖打印出PARAMS,看看是否存在一個PID PARAM,繼承人的輸出

Started GET "/versions" for 127.0.0.1 at 2014-10-18 19:17:28 +1100 
Processing by VersionsController#index as HTML 
"hello world" 
{"action"=>"index", "controller"=>"versions"} 
nil 
#<Effect id: nil, effect1: nil, effect2: nil, effect3: nil, created_at: nil, updated_at: nil> 
"hello owlrd" 

好像我不能把PID爲PARAMS。

的routes.rb

Rails.application.routes.draw do 
    resources :trashes 

    resources :versions 

    resources :effects 

    devise_for :users 
    resources :posts 
    resources :homes 

    # routing to the login page 
    devise_scope :user do 
    root :to => 'devise/sessions#new' 
    end 

耙路線

     Prefix Verb URI Pattern     Controller#Action 
       trashes GET /trashes(.:format)    trashes#index 
         POST /trashes(.:format)    trashes#create 
       new_trash GET /trashes/new(.:format)   trashes#new 
       edit_trash GET /trashes/:id/edit(.:format) trashes#edit 
        trash GET /trashes/:id(.:format)   trashes#show 
         PATCH /trashes/:id(.:format)   trashes#update 
         PUT /trashes/:id(.:format)   trashes#update 
         DELETE /trashes/:id(.:format)   trashes#destroy 
       versions GET /versions(.:format)   versions#index 
         POST /versions(.:format)   versions#create 
      new_version GET /versions/new(.:format)  versions#new 
      edit_version GET /versions/:id/edit(.:format) versions#edit 
       version GET /versions/:id(.:format)  versions#show 
         PATCH /versions/:id(.:format)  versions#update 
         PUT /versions/:id(.:format)  versions#update 
         DELETE /versions/:id(.:format)  versions#destroy 
       effects GET /effects(.:format)    effects#index 
         POST /effects(.:format)    effects#create 
       new_effect GET /effects/new(.:format)   effects#new 
      edit_effect GET /effects/:id/edit(.:format) effects#edit 
        effect GET /effects/:id(.:format)   effects#show 
         PATCH /effects/:id(.:format)   effects#update 
         PUT /effects/:id(.:format)   effects#update 
         DELETE /effects/:id(.:format)   effects#destroy 
     new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
      user_password POST /users/password(.:format)  devise/passwords#create 
     new_user_password GET /users/password/new(.:format) devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PATCH /users/password(.:format)  devise/passwords#update 
         PUT /users/password(.:format)  devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)  devise/registrations#cancel 
     user_registration POST /users(.:format)    devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)  devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)   devise/registrations#edit 
         PATCH /users(.:format)    devise/registrations#update 
         PUT /users(.:format)    devise/registrations#update 
         DELETE /users(.:format)    devise/registrations#destroy 
        posts GET /posts(.:format)    posts#index 
         POST /posts(.:format)    posts#create 
       new_post GET /posts/new(.:format)   posts#new 
       edit_post GET /posts/:id/edit(.:format)  posts#edit 
        post GET /posts/:id(.:format)   posts#show 
         PATCH /posts/:id(.:format)   posts#update 
         PUT /posts/:id(.:format)   posts#update 
         DELETE /posts/:id(.:format)   posts#destroy 
        homes GET /homes(.:format)    homes#index 
         POST /homes(.:format)    homes#create 
       new_home GET /homes/new(.:format)   homes#new 
       edit_home GET /homes/:id/edit(.:format)  homes#edit 
        home GET /homes/:id(.:format)   homes#show 
         PATCH /homes/:id(.:format)   homes#update 
         PUT /homes/:id(.:format)   homes#update 
         DELETE /homes/:id(.:format)   homes#destroy 
        root GET /       devise/sessions#new 
+0

我認爲這是一個路由問題,你是否設置了索引方法來接收pid作爲動態段的路由。但是如果修改index方法的路由,你將面臨另一個問題,所以':pid'作爲動態段傳遞,show方法的路由將會發生衝突,因爲兩個路由將具有相同的簽名,即'controller_name/dynamic_segment' + plus都將使用相同的'http verb' – 2014-10-18 08:32:15

+0

讓我更新它並粘貼我的routes.rb。我查了很多帖子,他們說這會起作用。 – 2014-10-18 08:37:02

+0

你能展示從'versions_path(:pid =>「123」)生成的url嗎?'你可以在瀏覽器中加載視圖後獲取這個url。 – 2014-10-18 08:39:23

回答

0

問題不在於你的路線,但與輔助你using.If你看看由button_to生成的HTML,這將是是這樣的:

<%= button_to "New", action: "new" %> 
# => "<form method="post" action="/controller/new" class="button_to"> 
#  <div><input value="New" type="submit" /></div> 
# </form>" 

所以它是一個形式,並形成默認發送POST請求

FIX:

變化button_to助手默認情況下LINK_TO,就這樣你就不必爲它指定方法選項發送GET請求

<%= link_to "Add New Version", versions_path(:pid => "123"), :class => "btn btn-default", :method => :get %> 
相關問題