【问题标题】:@user = whatever is selected@user = 选择的任何内容
【发布时间】:2017-01-16 05:48:42
【问题描述】:

:user_id被选中,我们如何在collection_select那个用户的挑战?换句话说,我们如何使@user 等于在_dueler_fields 中选择的:user_id

决斗/_form.html.erb

<%= simple_form_for(@duel) do |f| %>
  <%= f.fields_for :duelers do |dueler| %>
    <%= render 'dueler_fields', :f => dueler %>
  <% end %>
  <%= link_to_add_association f, :duelers do %>
    + Dueler
  <% end %>
  The loser(s) will <%= f.text_field :consequence, placeholder: "Enter Consequence" %>
<% end %>

决斗/_dueler_fields.html.erb

<%= f.select :user_id, User.order(:name).map { |user| [user.full_name, user.id] } %>  will
<%= collection_select(:dueler, :challenge_id, @challenges, :id, :full_challenge) %>

duels_controller

def new
  @duel = Duel.new
  @duel.duelers << Dueler.new(user_id: current_user.id, user_name: current_user.name, user_last_name: current_user.last_name)
  @user = # How can we set this to whatever was selected?
  @challenges = @user.challenges.order(:created_at)
end

schema.rb

  create_table "duelers", force: true do |t| #belongs_to :user & :challenge & :duel
    t.integer  "user_id"
    t.integer  "challenge_id"
    t.datetime "created_at",     null: false
    t.datetime "updated_at",     null: false
    t.integer  "duel_id",        null: false
    t.boolean  "accept"
    t.string   "user_name"
    t.string   "user_last_name"
    t.string   "challenge_name"
  end

  add_index "duelers", ["duel_id"], name: "index_duelers_on_duel_id", using: :btree

  create_table "duels", force: true do |t| #belongs_to :user & :challenge, has_many :duelers
    t.text     "consequence"
    t.text     "reward"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
  end

更新

<%= f.select :user_id, User.order(:name).map { |user| [user.full_name, user.id] }, include_blank: true, id: "change-challenge-options" %> will
<%= collection_select(:dueler, :challenge_id, @challenges, :id, :full_challenge, include_blank: true) %>

<script> # Doesn't Work
    $( "#change-challenge-options" ).change(function() {
         $.ajax({
            type: "GET",
            url: '<%= user_challenges_path %>',
            data: {name: $('#change-challenge-options').prop('value')}
         });
    });
</script>

【问题讨论】:

  • 你可能需要用 javascript 解决这个问题
  • 我对@lcguida 持开放态度。我打开了一个赏金,因为我无法自己解决这个问题。
  • 也许这会有所帮助:kernelgarden.wordpress.com/2014/02/26/…(对不起,我没有时间真正回答你的问题)
  • params[:duel][:user_id]可以得到用户的id,不是吗?
  • 不,我得到了nil 值@Ashitaka

标签: javascript ruby-on-rails ruby


【解决方案1】:

刷新页面时不必去控制器获取用户挑战,解决它的最佳形式似乎是获得一个函数,该函数将挑战返回到从 users_id 选择的“更改”操作激活的 json 请愿书

在用户控制器中:

def challenges
  user = User.find_by_id(user_params)
  @challenges = user.challenges.order(:created_at)
  respond_to |format|
    format.js { render json: @challenges.as_json, status: 200 }
  end
end

def user_params
  params.require(:user).permit(:user_id)
end

在javascript中:

$("#user_select").on("change", function(){
// make ajax petition with the user: {user_id: $(this).val()}
// and rescue the results to display wher you want
})

【讨论】:

  • 谢谢好先生!我认为这是在正确的轨道上。所以我将def challenges 放在users_controller 中,然后我要更改duels/_dueler_fields.html.erb 中的任何内容吗?我也玩弄了你的 javascript 建议。更新问题:)
猜你喜欢
  • 2012-02-19
  • 2016-12-10
  • 2013-07-09
  • 2018-10-23
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多