2017-05-05 34 views
-1

我下面https://coderwall.com/p/rqjjca/creating-a-scoped-invitation-system-for-rails是空的,我碰到這個Rails的,在形式上第一個參數不能包含零或

<%= form_for @invite , :url => invites_path do |f| %> 

<%= @invite.story_id=1 %> 

    <%= f.hidden_field :story_id, :value => @invite.story_id %> 
    <%= f.label :email %> 
    <%= f.email_field :email %> 
    <%= f.submit 'Send' %> 
<% end %> 

我在本教程中失去了跑了作爲我無法找到示例代碼。

究竟是什麼:url標記?這可以用硬編碼進行測試嗎?

class InvitesController < ApplicationController 

    def create 
    @invite = Invite.new(invite_params) 
    @invite.sender_id = current_user.id 
    @invite.recipient = 1 

    end 

def invite_params 
    params.require(:story).permit(:title, :body, :user_id) 



    end 
end 

我該如何處理?

回答

0

,你需要在你的控制器

高清新
          @invite = Invite.new

+0

有一點我想在這裏知道def new,而invite.new指的是兩個不同的東西正確嗎? – Jay

+0

是的,def new是我們的新方法,當您添加新邀請時,會調用它。我們需要發送空白對象來形成,所以我們使用Invite.new創建Invite對象,這種新的邀請方法來自活動記錄。 – tjs7706

2

關於您的問題的主題行,我認爲這是您收到的錯誤。在這種情況下,這意味着您的@invite變量是nil。在本教程中,它指出作者將該表單放置在用戶組的「edit」視圖中。「所以在你的控制器中,你需要引用這個變量。事情是這樣的:

def edit 
    @invite = Invite.find(params[:id]) 
end 

在關於:url問題:

:url選項是窗體被提交到網址。

下面是它在docs說:

:url - 一個URL的形式提交給。這可以用與傳遞給url_for或link_to的值相同的方式表示。因此,例如,您可以直接使用命名路線。當模型由字符串或符號表示時,如上例所示,如果沒有指定:url選項,默認情況下表單將被髮送回當前url(我們將在下面描述一種替代資源導向的form_for其中URL不需要明確指定)。

在教程前面,你又說:

resources :invites 

routes.rb文件。這會爲邀請創建命名路線。

你可以通過鍵入rake routes看到這些。

這將是這樣的:

   invites GET  /invites(.:format)          invites#index 
        POST  /invites(.:format)          invites#create 
      new_invite GET  /invites/new(.:format)         invites#new 
     edit_invite GET  /invites/:id/edit(.:format)       invites#edit 
       invite GET  /invites/:id(.:format)         invites#show 
        PATCH  /invites/:id(.:format)         invites#update 
        PUT  /invites/:id(.:format)         invites#update 
        DELETE  /invites/:id(.:format)         invites#destroy 

因此,通過將在的form_for :url => invites_path,這意味着你要提交表單到「/邀請」路線,相關的邀請#index動作。

+0

我編輯我的回答添加新的閃避,實現我忘記添加相關信息來解決表單中的'nil'錯誤!哎呀!:-) –

相關問題