2008-10-21 110 views
5

我在這裏有一個非常簡單的rails問題,但我似乎無法在任何地方找到答案。我猜想一些問題源於Rails 2.1的Rails 1.2教程。無論如何..Rails忽略渲染和redirect_to

我正在寫一個博客系統,我正在實施評論位。一旦我用腳本/控制檯創建了它們,我的評論顯示正常,但獲得評論表單本身的工作是困難的。

在posts_controller.rb我

def comment 
    Post.find(params[:id]).comments.create(params[:comment]) 
    flash[:notice] = "Added comment" 
    #render :action => show 
    redirect_to :action => show 
    end 

和show.html.erb(視圖)我有

<%= form_tag :action => "comment", :id => @post %> 
    <%= text_area "comment", "body" %><br> 
    <%= submit_tag "Post Comment" %> 

當我提交它試圖去URB形式/ posts/comment/1顯然是不正確的,並且它抱怨它找不到模板。顯然,我不想在那裏有一個模板,因爲我已經告訴它重定向到show動作,因爲我希望它只是重新顯示帖子的演示頁面,並在那裏發表新的評論。

我已經嘗試了註釋掉的行(render:action => show)和redirect_to行,並且都沒有做任何事情。

我確定我錯過了一些簡單的東西,但它是什麼?

回答

8

請用redirect_to :action => 'show', :id => params[:id]加引號顯示工作嗎?

-1

是的,你用舊的導軌風格。

新的東西:

form_for :comment, :url => { :post_id => @post } do |f| 
    f.text_area :body 
    submit_tag "Post" 
    end 

可以使用的資源文章和評論,搜索谷歌更好的教程或安裝導軌1.2.6:

gem install -v 1.2.6 rails 
0

的Rails 2.1包含了 「RESTful資源」。 show恰好是所有rails控制器使用的預定義REST動作之一的名稱。

Rails在幕後做了一些魔術,並且:show相當於「用特定的給定ID顯示這個特定元素」。聽起來好像它已經混在一起了。該ID可能默認爲「1」。因此,你從渲染看到生成的URL調用

這樣做會使用以下操作和模板的軌道2.1方式:

  • index - 顯示的評論
  • create的完整列表 - 添加新評論
  • show - 僅顯示特定評論(不是完整列表)。聽起來不像這是你想要的,但軌道內的「魔術」將默認爲這個。

還有用於new(放映視圖中輸入新的註釋)edit(顯示視圖做現有註釋的編輯)update(處理更新提交)和destroy(杜)行動,但它不」看起來你會在這個例子中使用它們。

你有指南的鏈接嗎?將它轉換爲Rails 2.1風格並不難。

+0

該教程位於http://www.sapphiresteel.com/How-To-Create-A-Ruby-On-Rails-Blog,168。我也發佈了關於這種問題的另一個問題http://stackoverflow.com/questions/224669/correct-rails-21-way-of-doing-things – robintw 2008-10-22 06:54:05