Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将联接键添加到组_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 将联接键添加到组

Ruby on rails 将联接键添加到组,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我正在创建一个应用程序来存储朋友之间的游戏结果。在我的应用程序中,组将被称为Leagues 为了保持联盟的私密性,我想添加一个加入密钥。创建联盟时,创建者选择一个连接键。稍后,其他用户可以通过从下拉列表中选择联盟并填写确切的加入键来加入。只有当join键与所选联盟匹配时,用户才可以进行此操作 控制器: def edit @user = User.find(current_user.id) @league_list = League.all.map{|l| [

我正在创建一个应用程序来存储朋友之间的游戏结果。在我的应用程序中,组将被称为Leagues

为了保持联盟的私密性,我想添加一个加入密钥。创建联盟时,创建者选择一个连接键。稍后,其他用户可以通过从下拉列表中选择联盟并填写确切的加入键来加入。只有当join键与所选联盟匹配时,用户才可以进行此操作

控制器:

 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
# 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
如您所见,我必须编辑用户联盟id才能完成加入

视图:

视图:




连接键



!!注意,这不能在之后更改




更新
操作可以如下所示:

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 %>
表格可以如下所示:

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 %>

这个模型之间的关系是什么?我已经添加了关于联盟的模型中的关系。你有带连接键的联盟,你希望用户输入用户想要加入的联盟的连接键。如果是这样,用户如何知道他必须在表单中输入的加入密钥?联盟创建者必须选择加入密钥。在他们通过短信、facebook等方式将加入密钥发送给朋友后。。。目标是只允许好友加入。rails中没有
input\u field\u tag
。您还需要删除
@user.save
。加入键确实是Leagues中的一个属性。但是我得到了一个错误:param丢失或值为空:user我假设我仍然必须像您在注释中所说的那样相应地传递param,但我不确定该怎么做this@dkp你知道这里的问题吗?@LouisDeBeule我已经编辑了表单,并在答案中添加了强参数方法。请试一试。
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 %>
def user_join_league_params
  params.permit!(:league_id,:join_key)
end