0

だから、私はRuby on Railsに本当に慣れていないので、全体がまだ中国語のように聞こえます。これがばかげた質問であればすみませんが、アプリにコピーできる新しいボタンを作成しようとしています。

私のフォームには次のものがあります。

%span.btn.btn-mini.btn-inverse= link_to copy_image, copy_campaign_signal_processor_item_path(@campaign, @processor, item) ,data: { toggle:"modal",target: "#myModal"}, remote: true

それはうまく機能し、私のためにボタンを作成します。次に、routes.rb に次のように記述します。

resources :signal_processors, exclude: [:index, :new, :create], controller: 'processors' do

        member do
          get :modify, :action => :edit, :force_schema_update => true
        end

        resources :items do
          member do
            get :copy
          end
        end

最後に、items_controller.rb には次のものがあります。

  def copy
    @overlay_title = "Copy #{@processor.item_name}"
    @processor.properties.each do |property|
      unless @item.property_values.collect{|a| a.property_id}.index(property.id)
        @item.property_values << SignalProcessor::PropertyValue.new(property: property)
      end
    end

    respond_to do |format|
      format.js
    end
  end

問題は、何らかの理由で items_controller.rbitemの関数に渡されないように見えるためcopy、コピー ボタンをクリックするたびにエラーが発生することです。

undefined methodnil:NilClass` の property_values'

行の場合:

unless @item.property_values.collect{|a| a.property_id}.index(property.id)

私は何を間違っていますか?なぜitem合格しないのですか?

4

2 に答える 2

0

@itemnilはインスタンス変数であり、特に設定しない限りその値はです。ここにあるの@itemは、このアクションのどこにも設定しないためnilです。おそらく(対応するItemモデルがあると仮定して)次のように入力する必要があります。

@item = Item.find(params[:id])

@item値を使用する前に。

于 2013-06-15T21:17:28.387 に答える
0

まず、Itemid を渡すようにフォーム ビューを修正する必要があります。これを使用して、コントローラーで対応するモデル オブジェクトを検索できます。

%span.btn.btn-mini.btn-inverse= link_to copy_image, copy_campaign_signal_processor_item_path(@campaign, @processor, item.id) ,data: { toggle:"modal",target: "#myModal"}, remote: true

フォームでは、パスに 3 つの引数を渡していますが、ルートではまだそれらに名前を付けていません。リソース ブロックcopy内でルートに渡すパラメーターに名前を付けることができます。:items

resources :items do
    member do
        get 'copy/:campaign/:processor/:item_id', :action => 'copy'
    end
end

Item次に、コントローラーで、 ID で検索できます。

def copy
   @item = Item.find(params[:item_id])
   ...
end
于 2013-06-15T21:18:21.847 に答える