2014-10-18 61 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 %> 
相关问题