0

現在のユーザーに基づいてデータベースにレコードを作成するために使用される多くの link_tos があります。

現在のユーザーが他のユーザーに代わってレコードを追加できるようにしたいと思います。たとえば、ドロップダウン メニューを追加して、現在のユーザーが代わりにレコードを作成するユーザーを選択できるようにします。

上記のニーズに合わせて調整する必要がある次のコードがあります-何か助けてください:)

<%= collection_select(:user, :id, User.where(:department_id => current_user.department_id).all, :id, :firstname, :selected => current_user.id) %>

<% @myTemplates.where(:pickable => true).each do |template| %>
    <%= link_to shifts_path(:template_id => template.id, :shift_date => date), :method => :post do %>
        <%= template.type.name %>
    <% end %>
<% end %>

コントローラーで、動作しない次のことを試しました-NillClassエラーが発生しました。

params[:user][:id]

編集:

21:38:38 web.1     | Started POST "/shifts?shift_date=2013-03-19&template_id=2" for 127.0.0.1 at 2013-03-19 21:10:31 +0100
21:38:38 web.1     | Processing by ShiftsController#create as HTML
21:38:38 web.1     |   Parameters: {"authenticity_token"=>"PMpPcxD9f1xh/KmTx2f0b8KZkYu91Q3n3zM7f5ie4zU=", "shift_date"=>"2013-03-19", "template_id"=>"2"}
21:38:38 web.1     |   User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
21:38:38 web.1     |   Template Load (0.1ms)  SELECT "templates".* FROM "templates" WHERE "templates"."id" = ? LIMIT 1  [["id", "2"]]
21:38:38 web.1     | Completed 500 Internal Server Error in 2ms
21:38:38 web.1     | 
21:38:38 web.1     | NoMethodError - undefined method `[]' for nil:NilClass:
21:38:38 web.1     |   app/controllers/shifts_controller.rb:14:in `create'
21:38:38 web.1     |   (gem) actionpack-3.2.11/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
21:38:38 web.1     |   (gem) actionpack-3.2.11/lib/abstract_controller/base.rb:167:in `process_action'
21:38:38 web.1     |   (gem) actionpack-3.2.11/lib/action_controller/metal/rendering.rb:10:in `process_action'
21:38:38 web.1     |   (gem) actionpack-3.2.11/lib/abstract_controller/callbacks.rb:18:in `block in process_action'
21:38:38 web.1     |   (gem) activesupport-3.2.11/lib/active_support/callbacks.rb:436:in `_run__200718806994229589__process_action__4067499974676832569__callbacks'
21:38:38 web.1     |   (gem) activesupport-3.2.11/lib/active_support/callbacks.rb:405:in `__run_callback'
21:38:38 web.1     |   (gem) activesupport-3.2.11/lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
21:38:38 web.1     |   (gem) activesupport-3.2.11/lib/active_support/callbacks.rb:81:in `run_callbacks'
21:38:38 web.1     |   (gem) actionpack-3.2.11/lib/abstract_controller/callbacks.rb:17:in `process_action'
...
...

私の作成アクションには以下が含まれます

@template = Template.find(params[:template_id])

submission_hash = {"user_id"      => params[:user][:id],
                   "type_id"      => @template.type_id,
                   "paytypes_id"  => @template.paytypes_id,
                   "shiftdate"    => params[:shift_date],
                   "shiftstart"   => @template.shiftstart,
                   "shiftend"     => @template.shiftend}

@shift = Shift.new(submission_hash)
4

1 に答える 1

0

この方法では実際には機能しません... ページがレンダリングされたら、JS を呼び出して変更する必要があります。ここでの選択肢は本当に 3 です

  1. link_to をレンダリングする ajax エンドポイントを作成し、コンテナーのコンテンツを応答と交換します。XMLHTTPRequest を介して、ドロップダウン onchange の値をエンドポイントに投稿できます。

  2. ドロップダウン内のすべてのアイテムに対して link_to を作成し、onchange イベントの後にドロップダウンの値に基づいて条件付きで表示/非表示にします

  3. リンク自体をバインドし、コンテンツに基づいて動的に構築します。

.

jQuery("a#link").bind("click", function (e) {
  e.preventDefault();
  var sel = jQuery("#dropdown").val();
  document.location = "/something/"+sel;

}

これを投稿として行うという概念に従って、コントローラーのドロップダウンのパラメーターを解析してアクションを決定してみませんか。link_to のことを本当に理解していませんか?

于 2013-03-18T20:40:22.393 に答える