2012-02-11 2 views
0

Я создаю базовое приложение для карт лояльности с моделью Merchant and Loyaltycard. В коммерсант # шоу зрения у меня есть эта линияПередача объекта с помощью ссылки link_to, на которую нужно ссылаться в модели # Новая страница

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

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

<%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%> 

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

Вот код контроллера для loyaltycard

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 
+0

Предоставил ли вы сообщение об ошибке и код контроллера? Моя ставка - проблема в контроллере? Вам должно быть так: @merchant = Merchant.where (: id => merchant_id) и, конечно, Merchant с id == 1 должен существовать в базе данных. –

+0

Я добавил информацию, которую вы запросили .. Спасибо за вашу помощь. – John

ответ

0

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

1

Что вам нужно сделать в вашем new действия с помощью params[:merchant_id] посмотреть и установить @merchant

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^