2017-02-01 3 views
1

select_tag의 입력을 컨트롤러 메서드에 삽입하려고합니다. 내가 보았으므로이 문제를 해결할 수 없습니다.select_tag의 입력을 레일즈 컨트롤러에 전달하는 방법

아래 코드는 순위 선택에 대한 매개 변수가 전혀 없습니다.

<h1>hello please set <%= @user.username %>'s rank'</h1> 

    <%= select_tag 'rank', options_for_select(@ranks.collect{ |r| [r.rank_name] }) %> 
    <%= button_to "Update", :action => "set_user_rank_update", value: "#{@user.id}", method: :post %> 

컨트롤러와 아래의 업데이트 및 노선

컨트롤러 :

class Admin::RankController < ApplicationController 
    before_action :admin? 
    def new 
    @rank = Rank.new 
    end 

    def create 
    @rank = Rank.new(rank_params) 

    if params["rank"]["admin"].to_i == 1 
     @rank.toggle! :admin? 
    end 

    if @rank.save 
     flash[:success] = "Rank created" 
     redirect_to root_path 
    else 
     flash[:danger] = "Failed to create rank" 
     render 'new' 
    end 
    end 


    def set_user_rank_new 
    @user = User.find_by_id(params["format"]) 
    @ranks = Rank.all 

    end 

    def set_user_rank_update 
    @user = User.find_by_id(params["value"]) 
    @rank = Rank.find_by_id(params["rank"]) 
    @rank_backup = @user.rank.first 
debugger 
    @user.rank - @user.rank.first 
    @user.rank << @rank 

    if @user.rank.first == @rank 
     flash[:success] = "Set user's rank" 
     redirect_to root_path 
    else 
     flash[:danger] = "Failed to set user's rank" 
     @user.rank - @user.rank.first 
     @user.rank << @rank_backup 

     render 'set_user_rank_new' 
    end 
    end 

private 
def rank_params 
    params.require(:rank).permit(:rank_name, :rank_color) 
end 
end 

경로

Rails.application.routes.draw do 
    devise_for :users, 
       :controllers => { :registrations => "member/registrations" , :sessions => "member/sessions"} 

    scope module: 'public' do 
     root 'welcome#index' 
    end 

    scope module: 'member' do 
     get 'members/:id'   => 'member#show' 
    end 

    scope module: 'admin' do 
     get 'rank/new'   => 'rank#new' 
     post 'rank/create'  => 'rank#create' 
     get 'rank/set_user_rank/new'  => 'rank#set_user_rank_new' 
     post 'rank/set_user_rank/update'  => 'rank#set_user_rank_update' 
    end 

end 
+0

컨트롤러를 추가 할 수 있습니까? 그래서 나는 당신이 어떻게 매개 변수를 확인하는지 볼 수 있습니다. – SsouLlesS

답변

1

는 options_for_select하는 두 요소의 배열을 전달하십시오. 당신이 옵션 텍스트를 얻을 수있는 것처럼 보였지만 값이 없기 때문에 왜 params에 나타나지 않는지 설명 할 수 있습니다. 그래서 예를 들면

: <%= select_tag 'rank', options_for_select(@ranks.collect{ |r|[r.rank_name, r.id] }) %>

1

button_to 도우미 (이 경우 사용자 ID에) 도우미 문에 포함 된 단지 매개 변수와 인라인 양식을 작성합니다.

페이지의 결과 HTML을 검토하여이를 확인할 수 있습니다. 이는 양식 태그 외부에있는 순위에 대한 입력 필드를 표시합니다.

순위 매개 변수를 포함하려면 양식 도우미를 사용하여 양식을 설정하고 순위 입력이 양식 안에 포함되어 있는지 확인해야합니다.

0

컨트롤러 액션에서 어떤 용도로 사용해야합니까? link_to를 사용하면 매개 변수도 전달할 수 있습니다. 컨트롤러와 경로를 확인하는 것이 좋습니다.

관련 문제