2016-04-11 6 views
1

私は、ゲーム結果を友人に保存するためのアプリを作成しています。私のアプリでは、グループはリーグと呼ばれます。グループに参加キーを追加する

リーグを非公開にするには、参加キーを追加したいと思います。リーグが作成されると、作成者は結合キーを選択します。後の他のユーザーは、ドロップダウンからリーグを選択し、正確な参加キーを入力することで参加できます。ジョインキーが選択されたリーグに一致する場合にのみ、ユーザーが選択できます。

コントローラー:

def edit 
     @user = User.find(current_user.id) 
     @league_list = League.all.map{|l| [ l.league_name, l.id ] } 
    #  @league_keys = League.all.map{|l| [ l.join_key, l.id ] } 
    end 

    def update 
     @user = User.find(current_user.id) 

     if @user.update(user_join_league_params) #&& @league_list.league_id == @league_keys.league_id 
      @user.save 
      redirect_to root_path, :notice => "Successfully joined this league!" 
     else 
      render 'index' 
     end 
    end 

私は、ユーザーが参加を完了するためにleague_id編集する必要が見ることができるように。

ビュー:選択したリーグ戦がキーに充填一致した場合のみ、更新操作を実行するために

<div class="panel panel-default" style="margin-right:10px; margin-left:10px; text-align:center"> 
      <div class="panel-heading"> 
       JOIN A LEAGUE 
      </div> 
      <div class="panel-body"> 

       <%= simple_form_for(@user) do |f| %> 

       <%= f.select(:league_id, @league_list) %><br> <br> 

       # <%= f.input_field :join_key %><br> <br> 

       <p>!! Watch out this cannot be changed after !!</p> 

       <br> <br> <%= f.submit "Join league", class: "btn-submit" %> 
       <% end %> 


     </div> 
</div> 

は、だから私はこのフォームをしたいと思います。

私はstackoverflowの多数の投稿で答えを探していましたが、私はsimular問題の投稿を見つけることができませんでした。

どうすればいいですか?

EDIT:

関係:

class User < ActiveRecord::Base 

belongs_to :league 
end 

class League < ActiveRecord::Base 
    has_many :games 
    has_many :multiplayergames 
    has_many :users 
end 

SECOND EDIT:

だから私はsolloutionを実装しようとしました。

私は= f.select <%ためsimple_formを使用していました(:league_id、@league_list)私はこのようにそれを実行しようとしました%>

<%= form_tag(user_path(@user), method: :put) do %> 
    <%= select_tag :league_id, options_for_select(@league_list) %><br> <br> 

       <p>Join Key</p> 
    <%= text_field_tag :join_key %><br> <br> 
    <p>!! Watch out this cannot be changed after !!</p> 

    <br> <br> <%= submit_tag "Join league", class: "btn-submit" %> 
<% end %> 

ただし、これはエラーを与える:

param is missing or the value is empty: user

THIRD EDIT:

コントローラ:

# JOIN A LEAGUE 

    def edit 
     @user = User.find(current_user.id) 
     @league_list = League.all.map{|l| [ l.league_name, l.id ] } 

    end 

    def update 
     @user = User.find(current_user.id) 
     @league = League.find_by_id(params[:league_id]) 

     if @league.join_key == params[:join_key] && @user.update(user_join_league_params) 

      redirect_to root_path, :notice => "Successfully joined this league!" 
     else 
      redirect_to edit_user_path(current_user), notice: "Could not join league check if join key is correct!" 
     end 
end 

def user_join_league_params 

     params.permit!(:league_id,:join_key) 
end 

VIEW:次のように

<%= form_tag(user_path(@user), method: :put) do %> 

       <%= select_tag :league_id, options_for_select(@league_list, :league_id) %><br> <br> 

         <p>Join Key</p> 

       <%= text_field_tag :join_key %><br> <br> 

       <p>!! Watch out this cannot be changed after !!</p> 

      <br> <br> <%= submit_tag "Join league", class: "btn-submit" %> 

     <% end %> 
+0

このモデルの間の関係は何ですか? – uzaif

+0

私はリーグに関するモデルからの関係を追加しました –

+0

あなたは参加キーを持つリーグを持っていて、ユーザーは参加したいそのリーグの参加キーを入力します。もしそうなら、ユーザーがフォームに入力しなければならない結合キーを知る方法は? – Pavan

答えて

1

updateアクションを見ることができ、次のように

def update 
    @user = User.find(current_user.id) 
    @league = League.find_by_id(params[:league_id]) 
    if @league.join_key == params[:join_key] && @user.update(league_id: params[:league_id]) 
     redirect_to root_path, :notice => "Successfully joined this league!" 
    else 
     render 'index' 
    end 
end 

フォームを見ることができます:

<%= form_tag(user_path(@user), method: :put) do %> 
    <%= select_tag :league_id, options_for_select(@league_list) %><br> <br> 
    <%= text_field_tag :join_key %><br> <br> 
    <p>!! Watch out this cannot be changed after !!</p> 
    <br> <br> <%= submit_tag "Join league", class: "btn-submit" %> 
<% end %> 

:私はassuを持っているがmed join_keyLeagueモデルの属性です。 user_join_league_paramsにはparamsを必ず入力してください。

編集:

あなたは、あなたのparamsを許可する必要があります。

def user_join_league_params 
    params.permit!(:league_id,:join_key) 
end 
+0

レールに 'input_field_tag'はありません。 – Pavan

+0

@パヴァンありがとう..編集中にそれを見落とした。 – dp7

+0

また、 '@ user.save'を削除する必要があります。 – Pavan

関連する問題