0

かなり簡単なことをしようとしています。

ファイルとメモを持つタスクを持つクライアントがいるシステムがあります

特定のクライアントに関係のないタスクを作成することもできます。

クライアント画面から新しいタスクを作成し、クライアント フィールドを選択せず​​に入力できるようにしたい (またはバックグラウンドで入力できるようにしたい)。もちろん、タスクを作成してからそれにクライアントをアタッチしたい場合は、クライアント セレクターが必要です。

すべてが理にかなっていることを願っています

次のようにネストされたルートがあります。

resources :clients do
  resources :notes
  resources :tasks do
    resources :notes
    resources :task_files
  end
end
resources :tasks do
  resources :notes
  resources :task_files
end

そして、機能するネストされた属性などに関連するものの負荷。

うまくいかないことの 1 つは、タスクを作成するときと、クライアントを知っているときにタスクを作成するときに、同じ _form を使用する方法です。例 client/:id/tasks/new vs tasks/new

私の直感では、@project を _form a la に入れると、次のようになります。

<%= simple_nested_form_for [@client,@task], html:{multipart: true} do |f| %>

その場合、クライアントのないタスクでは機能しません。

<%= simple_nested_form_for @task, html:{multipart: true} do |f| %>

クライアントを事前選択しません:

 <%= f.input :client_id, :collection => Client.accessible_by(current_ability, :read), :as => :select, :label => "Client" %>

クライアントが事前に選択されていない場合に使用されます。

何らかの方法でパラメーター @client.id を使用できるようにすることで、それを機能させる方法はありますか? @Client、@Client.id、および :client_id を試してみましたが、喜びはありませんでした。

確かにこれはかなり単純なはずです...

明確にするために: クライアントが存在する場合 (つまり、URL でわかっている場合)、クライアントを事前に選択し、変更できないようにしたいと思います。クライアントIDが存在しない場合、ユーザーが適用するクライアントを選択できるようにしたい(または空白のままにしておく)。

4

2 に答える 2

1

フォームにセレクターselected: params[:client_id]を残しましたが、仕事をしました。

<%= f.input :client_id, :collection => Client.accessible_by(current_ability, :read), selected: params[:client_id], :label => "Client", :include_blank => "" %>

または、次のことを行うことができます(以下の回答に似ていますが、方法は異なります)。これは、状況によっては選択した方法を使用するよりもクリーンな場合があります。

if params.has_key?[:client_id]
....
else
....
end
于 2013-10-14T16:21:09.723 に答える