2013-09-24 33 views
0

當我提交我的表單時,我收到一個錯誤:缺少模板letsgos /創建,應用程序/創建{:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby]}ActionView :: MissingTemplate創建動作

我不理解的是爲什麼當創建視圖爲from _form.html.erb時它正在尋找/創建。我不需要創建/創建文件。我在這裏錯過了什麼嗎?

letsgos_controller.rb:

before_action :signed_in_user, only: [:create, :destroy] 

    def create 
    @letsgo = current_user.letsgos.build(letsgo_params) 
    if @letsgo.save 
     flash[:success] = "Date posted!" 
     redirect_to root_url 
end 

    def destroy 
    @letsgo.destroy 
    redirect_to root_url 
    end 

users_controller:

def show 
    @user = User.find(params[:id]) 
    @letsgos = @user.letsgos.paginate(page: params[:page]) 
    @letsgo = current_user.letsgos.build if signed_in?' 
    end 

letsgo.rb:

belongs_to :user 
    default_scope -> { order('created_at DESC') } 
    validates :content, presence: true, length: { maximum: 360 } 
    validates :tag, presence: true 
    validates :user_id, presence: true 
end 

/users/show.html.erb:

<% if @user.letsgos.any? %> 
    Dates (<%= @user.letsgos.count %>) 
    <%= render @letsgos %> 
    <%= will_paginate @letsgos %> 
    <% end %> 

/letsgos/_form.html.erb

<%= form_for(@letsgo) do |f| %> 
    <div class="field"> 
     <%= f.text_area :content, placeholder: "Propose new date..." %> 
     </div> 
     <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
     <% end %> 

/letsgos/home.html.erb:

<% if signed_in %> 
    <% render 'letsgos/form' %> 
+0

我不知道,如果它在你的實際代碼,但如圖所示,你有你的letsgos_controller.rb語法問題(例如缺少'end'上'高清create' )。 –

+0

我有2'結束'def創建。 1根據def摧毀。而在私人def下letgo_params 2。這很好。 –

+0

然後你應該在問題中更新你的代碼清單,因爲它只爲'def create'顯示1'end'(並且在你處理時修正縮進)。 –

回答

2

裏面letsgoes_controller.rb你有以下創建方法:

def create 
    @letsgo = current_user.letsgos.build(letsgo_params) 
    if @letsgo.save 
     flash[:success] = "Date posted!" 
     redirect_to root_url 
    end 
    end 

根據該方法,如果@ letsgo.save返回false(由於驗證或其他),則該代碼將不會執行,這意味着rails會嘗試呈現與控制器同名的視圖文件行動 - create在這種情況下。因此,您需要考慮if的錯誤情況。像這樣的東西會工作:

def create 
    @letsgo = current_user.letsgos.build(letsgo_params) 
    if @letsgo.save 
     flash[:success] = "Date posted!" 
     redirect_to root_url 
    else 
     flash[:error] = "Date was not posted!" 
     redirect_to root_url 
    end 
    end 
+0

非常感謝!現在我必須創建保存操作。愚蠢的是我有類似的地方,我試圖使用'其他'和呈現主頁。謝謝 –

+1

你可以在'else'部分渲染'new'形式(有錯誤),所以你不必實現另一個方法 - 它會重用'create'動作。 –

+0

感謝您的提示 –

相關問題