2016-05-13 9 views
0

ページの読み込み中にこのエラーが発生しました。 私のコントローラは前にこのようになりdidntは私のcreate.html.erbがcreate.html.erbページを読み込もうとすると、「paramが見つからないか、値が空です」というエラーが表示されます。

 <%= form_for @story ,url: story_path do |f| %> 
     <%= label :story, :title %><br /> 
     <%= text_field :story, :story_title %> 

     <%= label :story, :body %><br /> 
     <%= text_field :story, :story_body %> 
     <%= submit_tag 'Create story' %> 
     <% end %> 

マイcreate.html.erbのように見えるこの

class StoryController < ApplicationController 
def index 
    @story = Story.all 
end 

def new 
    @story = Story.new 
end 

def create 
    @story = Story.new(story_params) 
    if @story.save 
     flash[:notice] = "Story created successfully" 
     flash[:color]= "valid" 
    else 
     flash[:notice] = "Story is invalid, man" 
     flash[:color]= "invalid" 
end 

end 

def show 
    @story = Story.find(params[:id]) 
end 
private 
def story_params 
params.require(:story).permit(:story_title, :story_body) 
end 

end 

のように見えるコントローラにメソッドを作成し、私はそれにそれを変更しました私はstory_paramのform_tforの代わりにform_forがどのように機能するかについていくつかの質問を読んだ後s。 しかしいずれにしても、私はまだエラーをとらえているのですが、なぜそれが修正されたのかを知りたいのですが。

+0

新しい話/を通じて、そのビューにアクセスしますか?真剣に? – Pavan

+0

作成するパラメータは何ですか? (サーバーが動作しているコンソールウィンドウを見てください) – jvillian

+0

私はまだ非常に新しいレールですが、create.html.erbを持っていないと思いますか? –

答えて

0

作成方法はPOSTです...彼がstory/createを入力すると、彼はすでにそれらの値を期待しています...だから彼は彼が見つけられないと言いますparams ...私は深くコードを見ていないが、それはうまくいくようだ。単にビューの名前をnew.html.erbに変更してください。 Newは作成のセットアップです。

新しい設定では、コントローラが実際にストーリーを作成する場所で、値を設定してからcreateを呼び出します。

ちょうどnew.html.erbにビューの名前を変更し、他のユーザーが言ったように、この

<%= form_for @story do |f| %> 
<%= f.label :title %><br /> 
<%= f.text_field :story_title %> 
<%= f.label :body %><br /> 
<%= f.text_field :story_body %> 
<%= submit_tag 'Create story' %> 
<% end %> 

に変更します。それらの入力は| f |の形式に属すると言う必要があります。 text_fieldがFに属し、f.text_field

そしてもちろん、あなたは、あなたが `create.html.erb`を持って

+0

ありがとう、私はそれがstory/createに入る際にそれらのパラメータを期待しているとは思っていませんでした。ですから、私はそれをnew.html.erbに改名します。 –

+0

作成は常にPOSTメソッドです...それは表示を使用しない:)私は助けることができてうれしい – Boltz0r

0

これはcreate.html.erb

<%= form_for @story ,url: story_path do |f| %> 
    <%= f.label :title %><br /> 
    <%= f.text_field :story_title %> 

    <%= f.label :body %><br /> 
    <%= f.text_field :story_body %> 
    <%= submit_tag 'Create story' %> 
    <% end %> 
+0

あなたの答えはありがとうございますが、私はまだ同じエラーが発生します –

+0

ここにエラーを表示できますか? – Sunny

+0

paramが存在しないか、値が空です:ストーリー –

0

で変更を加えてみあなたは確かStoryオブジェクトのためのあなたの属性はstory_titlestory_body名前が付けられていますか?

ない場合は、お使いのstory_paramsは次のようにする必要があります:、また

def story_params 
params.require(:story).permit(:title, :body) 
end 

そして@koshlendra提案を適用し、彼は正しいです。

私はあなたが動作するようになっていますどのように参照するには、偽のリソースのための足場を生成することをお勧め:

rails g scaffold Fake title:string body:text 

そして、それが働く完全にどのように理解するために生成されたコントローラとビューを見てください。

+0

私の属性はstory_titleとstory_bodyです。確かです。私はそれを自分で作りました。偽の足場を生成すると、私は理解しやすくなります、ありがとう! –

1

まず、form_forを使用している場合や、カスタムルートでフォームを送信したくない場合は、パスを指定する必要はありません。

新しいオブジェクトを使用している場合は、作成メソッドでフォームを送信し、既存オブジェクトでは更新メソッドでフォームを送信します。

だからあなたのフォームは、

<%= form_for @story do |f| %> 
    <%= f.label :title %><br /> 
    <%= f.text_field :story_title %> 
    <%= f.label :body %><br /> 
    <%= f.text_field :story_body %> 
    <%= submit_tag 'Create story' %> 
<% end %> 

され、このフォームはnew.html.erbファイルにする必要があります。

このフォームはフォームを送信してpostメソッドでアクションを作成します。そこから、条件に応じてレンダリングまたはリダイレクトを行う必要があります。だからあなたのコントローラを使用すると、termialでrake routesを行う場合、あなたはあなたが物語のモデルを持っている場合は、レールの規則によると、その後、あなたが直接作成することができます。またその期待方法

持つすべてのメソッドを参照することができ

class StoryController < ApplicationController 
    def index 
    @story = Story.all 
    end 

    def new 
    @story = Story.new 
    end 

    def create 
    @story = Story.new(story_params) 
    if @story.save 
     flash[:notice] = "Story created successfully" 
     flash[:color]= "valid" 
     redirect_to story_path(@story) 
    else 
     flash[:notice] = "Story is invalid, man" 
     flash[:color]= "invalid" 
     render :new 
    end 
    end 

    def show 
    @story = Story.find(params[:id]) 
    end 

    private 
    def story_params 
    params.require(:story).permit(:story_title, :story_body) 
    end 
end 

になります:タイトル&:story_titleの代わりにbody属性と:story_body

+0

ありがとう!これはうまくいきましたが、受け入れられた答えの視点を見るまで、なぜ私は理解できませんでした。あなたは大いに助けてくれました –

+0

あなたは大歓迎です。少なくとも、あなたは何が間違っているのか理解していました。 – bunty

関連する問題