Передача объекта через команду link_to для ссылки на модель # новая страница - PullRequest
0 голосов
/ 11 февраля 2012

Я создаю базовое приложение карты лояльности с моделями Merchant и Loyaltycard.В представлении продавца # show у меня есть эта строка

<%=link_to 'New Loyalty card', new_loyaltycard_path(:merchant_id=>1) %>

Я пытаюсь передать идентификатор продавца в новый вид карты лояльности #, чтобы он автоматически выбирался в качестве продавца этой карты.В карточке лояльности # _form (которая вызывается картой лояльности # новая) у меня есть строки

  <%if @merchant%>
  <%= f.hidden_field :merchant_id, :value => @merchant.id %>
  <%else%>
   <div class="field">
    <%= f.label :merchant_id %><br />
    <%= f.text_field :merchant_id %>
  </div>
  <%end%>

Но я получаю сообщение об ошибке, в котором говорится, что я не могу вызвать id для класса Nil.Есть ли лучший способ сделать это?

Вот код контроллера для карты лояльности

  def new
    @loyaltycard = Loyaltycard.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @loyaltycard }
    end
  end

  # GET /loyaltycards/1/edit
  def edit
    @loyaltycard = Loyaltycard.find(params[:id])
  end

  # POST /loyaltycards
  # POST /loyaltycards.json
  def create
    @loyaltycard = Loyaltycard.new(params[:loyaltycard])

    respond_to do |format|
      if @loyaltycard.save
        format.html { redirect_to @loyaltycard, notice: 'Loyaltycard was successfully created.' }
        format.json { render json: @loyaltycard, status: :created, location: @loyaltycard }
      else
        format.html { render action: "new" }
        format.json { render json: @loyaltycard.errors, status: :unprocessable_entity }
      end
    end
  end

Ошибка

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

То, что вам нужно сделать в вашем действии new, это использовать params[:merchant_id] для поиска и установки @merchant

@merchant = Merchant.find(params[:merchant_id])

Тогда ваш код должен работать, без этого @merchant равен нулюи вы не можете вызвать метод :id на nil

0 голосов
/ 29 февраля 2012

Вы не устанавливаете переменную @merchant нигде в вашем контроллере, но используете ее для представления.

...