2013-07-17 61 views
0

我是新來的鐵軌,仍在基礎工作,所以任何提示和建議非常感謝!關於在軌道上使用紅寶石渲染

我已經在網站上建立了一個功能性聯繫頁面,我希望能夠在不同頁面上呈現標籤內部的表單和功能。我在static_pages文件夾下面的代碼在我的意見的文件夾:

<div id="tabs"> 
<ul> 
    <li><a href="#tabs-1">About</a></li> 
    <li><a href="#tabs-5">Contact</a></li> 
</ul> 
    <div id="tabs-1"> 
    <%= render "shared/about"%> 
</div> 
<div id="tabs-5"> 
    <%= render "contact/new"%> 
</div> 

其中<%=渲染「接觸/新」%>對應於在視圖中接觸new.html.erb文件。

我的routes.rb內的相關代碼

match 'contact' => 'contact#new', :as => 'contact', :via => :get 
match 'contact' => 'contact#create', :as => 'contact', :via => :post 

,這裏是我的控制器:

class ContactController < ApplicationController 

    def new 
    @message = Message.new 
    end 

    def create 
    @message = Message.new(params[:message]) 

    if @message.valid? 
     NotificationsMailer.contact_pr(@message).deliver 
     redirect_to(root_path, :notice => "Message was successfully sent.") 
    else 
     flash.now.alert = "Please fill all fields." 
    render :new 
    end 
    end 
end 

然而,似乎不管我試試我依然無法呈現形式。我很抱歉,如果這是一個非常簡單的問題,並且我最感興趣的是在Ruby on Rails基礎知識方面做得更好,所以任何建議都會被讚賞!謝謝!

+0

你得到的錯誤是什麼? – Debadatt

+1

也許您需要在正在呈現選項卡的操作中的static_pages控制器中初始化@message = Message.new。 – Debadatt

回答

1

如果您想在其他模板中渲染此表單(您可以),則應將其提取爲部分名稱,例如:_form.html.erb

然後,你應該把

<%= render 'contact/form' %> 

到處都需要針對這一部分(包括new.html.erb模板)。 當你與這個工作,你應該離開

render :new 
在控制器

,因爲它比鑑於一點點不同,它呈現適當行動的範本,而非局部。 當然,你需要設置@message變量到處都需要這個部分。或者,你可以把你的部分:

<%= form_for(@message || Message.new) do |f| %> 

約佈局更多信息和渲染here

+0

上面的解決方案給我提供了NilClass的undefined方法'model_name': – user1337902

+1

@ user1337902就像我寫的那樣,你需要在你想渲染這個部分的每個動作中設置'@ message'。或者,你也可以寫下你的部分:'form_for(@message || Message.new)...'。 –

+0

太棒了!添加<%@ message = Message.new%>除了您的建議使它工作。謝謝!!! – user1337902