0

別のビュー内から 1 つのコントローラーのメソッドを呼び出そうとしています。次の投稿Rails call destroy method from within another controllerを見ましたが、実装に何か問題があります。

呼び出そうとしているメソッドは、アクセサー コントローラーにあります。

    def remove_permission_from_index
      Accessor.find(params[:id]).destroy
      respond_to do |format|
        format.html { redirect_to tasks_url }
        format.json { head :no_content }
      end
    end

このコントローラーには、次の強力なパラメーター メソッドもあります。

def accessor_params
  params.require(:accessor).permit(:accessor_id, :access_rights, :task_id)
end

私の見解は次のコードを呼び出しています

  <%= link_to 'Delete', {:controller => "accessors", :accessor => elem} ,method: :remove_permission_from_index, data: { confirm: "Are you sure?" }%>      </p>

elem は、タスク コントローラで定義されたセット内の要素です。

@canEdit = Accessor.select(:task_id).where("accessor_id = ? AND access_rights = ?", current_user, true)
@canEdit.each do |p|
    p.task = Task.find(p.task_id)

コードを実行すると、次のエラーが表示されます

param not found: accessor
    def accessor_params
      params.require(:accessor).permit(:accessor_id, :access_rights, :task_id)
    end
end

アクセサーパラメーターが渡されていないことがわかります。

Parameters:

{"_method"=>"remove_permission_from_index"}

a) 別のメソッドにアクセスしようとすると、なぜ accessor_params が呼び出されるのですか? b) 何が間違っていますか? やっぱりセットする:accessor => elem

4

1 に答える 1

1

コピペエラーかもしれませんが、

<%= link_to 'Delete', {:controller => "accessors", :accessor => elem} ,method: :remove_permission_from_index, data: { confirm: "Are you sure?" }%>      </p>

もっと似ているはずです:

<%= link_to 'Delete', {:controller => "accessors", :action => :remove_permission_from_index, :accessor => elem}, method: :delete, data: { confirm: "Are you sure?" }%>      </p>
于 2013-10-13T18:38:54.830 に答える