2014-09-11 92 views
0

我有模型:消息,我希望所有的用戶都可以保存說明,我希望沿着所有的應用程序的東西,蝙蝠我得到錯誤:Rails未定義的方法`model_name'。 看來,他不能從識別模型:application.html.erb從application.html.erb訪問模型屬性

_header.html.erb

<ul id="drop-nav"> 
    <li><a href="#">Bag</a> 
    <ul> 
    <%= simple_form_for (message) do |f| %> 
    <div class="form-inputs"> 
     <%= f.text_field :description , as: :text %> 
     <%= f.submit "Save" %> 
    </div> 
    <%end%> 
    </ul> 
    </li> 
</ul> 

application.html.erb

<!DOCTYPE html> 
<html> 
<head> 
    <title>Calendar</title> 
    <%= stylesheet_link_tag"application" , :media => "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 
<%= render 'layouts/header' , message: @​message%> 
<%= yield %> 

</body> 
</html> 
+1

你的控制器是什麼樣的? – awendt 2014-09-11 06:00:45

+0

什麼是應用程序控制器中的@消息? – 2014-09-11 06:02:36

+0

您的模型是從ActiveRecord :: Base繼承的嗎? – 2014-09-11 06:17:50

回答

1

集在應用程序控制器中啓動before_filter

before_filter :message 

private 
def message 
    @message = Message.new 
end 

現在這個動作會在每次請求被執行,將可應用廣泛

在你_header.html.erb

<%= simple_form_for message, url: message_path, method: :post do |f| %> 

將提交給MessagesController#創建

在你MessagesController

skip_before_action :message 

def create 
# do stuff 
end 
1

部分

錯誤將與您form_for呼叫您partial

-

目前,我們正在調用的部分是這樣的:

<%= render 'layouts/header' , message: @​message%> 

這有可能將不通過你需要的變量,從而阻止simple_form_for從對象(它需要)中取出model名稱。

爲了給大家一個交代,該simple_form_for方法建立在form_for方法在Rails的,這反過來使用@objects的頂部,你把它建立在整體上<form>

form_for產生適當的窗體標籤並生成表單構建器 知道表單所關注的模型的對象。輸入字段爲 ,通過調用表單構建器上定義的方法創建,這意味着 他們能夠生成與模型屬性對應的適當名稱和默認值 以及方便的ID等。 生成的字段名中的約定允許控制器在您的身邊無需付出努力就可以收到 表格數據。

簡潔地說,這意味着,如果你打算使用simple_form_for(並憑藉,form_for),你需要一個有效的Ruby/Rails對象傳遞到窗體。我相信你對部分的錯誤調用會阻止這種情況發生。


修復

你需要做到以下幾點:

<%= render 'layouts/header', locals: { message: @message } %> 

應該正確的數據傳遞到形式,假設當然,該數據存在開始。爲了確保這種情況(因爲我看到你使用它作爲您的佈局的一部分),你需要在每次調用@message變量調用一個動作:

#app/controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    before_action :set_message 

    private 

    def set_message 
     @message = Message.new 
    end 
end 

這將設置每次變量爲@message - 讓您可以調用它&將其應用於每次加載頁面時的form_for