0

Rails フォームを単純なドロップダウン メニューとして HTML テーブルに埋め込みました。また、ドロップダウンメニューに変更があるたびにフォームが送信されるようにフォームを実装しました。しかし、解決しようとしているルーティング エラーが発生しています。

フォームコード:

 <td>
            <%= form_for(lead, :action => 'update_lead_status', :html => {:id => 'lead_form'}, :remote => true) do |f| %>
                <%= f.select(:status, ["to_call","called","confirmed","lite"], {:selected => lead.status}, :onchange => "$('#lead_form').submit();") %>
            <% end %>
    </td>

routes.rb ファイル:

get 'leads/:id/edit_lead_status' => "leads#edit_lead_status"
  put 'leads/:id/update_lead_status'=> "leads#update_lead_status"

lead_controller.rb ファイル:

#PUT
  def update_lead_status
    @lead = Lead.find(params[:id])
    respond_to do |format|
      format.js
      if @lead.update_attributes(params[:lead])
        format.html { redirect_to leads_url, notice: 'Lead was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @lead.errors, status: :unprocessable_entity }
      end
    end
  end

また、テーブルに埋め込まれたフォームは、更新が成功したときにリダイレクトしようとする /leads URL にあります。

私のサーバーからのログ:

ActionController::RoutingError (No route matches [PUT] "/leads/130"):

status は、私のリード モデルでアクセス可能な属性です。

どこが間違っているのか教えてください。

アップデート:

それで、sevenseacatの答えを試してみたところ、update_lead_statusが呼び出されましたが、パラメーターが間違っていました。私のテーブルは次のようなものです:

<% @leads.each do |lead| %>
  <tr>
    <td><%= lead.id %></td>
    <td><%= lead.prefix %></td>
    <td><%= lead.name %></td>
    <td><%= lead.mobile %></td>
    <td><%= lead.phone %></td>
    <td><%= lead.category %></td>
    <td><%= lead.area %></td>
    <td><%= lead.city %></td>
    <td><%= lead.updated_at %></td>
    <td><%= lead.is_valid %></td>
    <td><%= lead.vendor_status %></td>
    <td><%= lead.call_tries %></td>
    <td>
        <%= form_for(lead, url: update_lead_status_path(lead.id), :html => {:id => 'lead_form'}, :remote => true) do |f| %>
            <%= f.select(:status, ["to_call","called","confirmed","lite"], {:selected => lead.status}, :onchange => "$('#lead_form').submit();") %>
        <% end %>
    </td>
    <td><%= lead.remarks %><%= link_to lead.remarks, :controller => "leads", :action => "edit_lead_remarks", :id => lead, :remote => true %>
    </td>
  </tr>
<% end %>

ここでは、テーブルのすべての行で、テーブルの最初のリードの ID として id を取ります。

4

2 に答える 2

0

フォームのアクション URL を正しく指定していません。たとえば、次のようにする必要があります。form_for(lead, url: update_lead_status_path(lead))

(たとえば、routes.rb でルートに名前を付けたと仮定しますas: :update_lead_status)。

于 2013-04-22T07:53:17.007 に答える
0

routes.rb ファイルに次のコード行を追加してから試してください。

resources :leads
于 2013-04-22T07:51:40.333 に答える