2015-11-05 63 views
0

解釋當我點擊新的崗位,並試圖挽救一個新的職位它給我的錯誤,然後我去控制器:獲得「參數丟失或爲空值:後」下面

private 
    def posts_params 
    params.require(:post).permit(:title, :description) 
    end 

並將'require(:post)'改爲'require(:posts'),然後我工作 但我嘗試編輯剛剛創建的新帖子,當我點擊保存時,它給了我同樣的錯誤,然後我只是改變它回到'必需(:後)「,它的工作原理,爲什麼發生這種情況?它就像一個循環,如果一個工程,另一個不工作,我必須改變這一件事

控制器:

class PostsController < ApplicationController 
    def index 
    @posts = Post.all 
    end 

    def edit 
    @posts = Post.find(params[:id]) 
    end 

    def update 
    @posts = Post.find(params[:id]) 

    if @posts.update(posts_params) 
    redirect_to @posts 
    else 
    render 'edit' 
    end 
end 

    def new 
    @posts = Post.new 
    end 

    def create 
     @posts = Post.new(posts_params) 
    if @posts.save 
     redirect_to @posts 
    else 
     render 'new' 
    end 
    end 

    def show 
    @posts = Post.find(params[:id]) 
    end 

    private 
    def posts_params 
    params.require(:post).permit(:title, :description) 
    end 


end 

視圖編輯:

<h1>Editing post</h1> 

<%= form_for(@posts) do |f| %> 

    <% if @posts.errors.any? %> 
    <div id="error_explanation"> 
     <h2> 
     <%= pluralize(@posts.errors.count, "error") %> prohibited 
     this post from being saved: 
     </h2> 
     <ul> 
     <% @posts.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <p> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </p> 

    <p> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </p> 

    <p> 
    <%= f.submit %> 
    </p> 

<% end %> 

<%= link_to 'Back', posts_path %> 

圖新:

<h1>New Article</h1> 
<%= form_for :posts, url: posts_path do |f| %> 
<% if @posts.errors.any? %> 
    <div id="error_explanation"> 
     <h2> 
     <%= pluralize(@posts.errors.count, "error") %> prohibited 
     this post from being saved: 
     </h2> 
     <ul> 
     <% @posts.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <p> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </p> 

    <p> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </p> 

    <p> 
    <%= f.submit %> 
    </p> 
<% end %> 
<%= link_to 'Back', posts_path %> 

可有人指出這個問題了呢?

回答

1

你混合

form_for(@posts) do |f| 

form_for :posts, url: posts_path 

在您的形式。

:posts版本將生成params[:posts]和@posts版本將生成params[:post]。因此你看到的問題。確保你的posts_params如下。

def posts_params 
    params.require(:post).permit(:title, :description) 
end 

然後只需更改您的兩個表格是

<%= form_for(@posts) do |f| %> 

軌將找出哪些可自動呼叫你,所以你不會有指定的路徑..

在一個側面說明,我可能會改變@posts@post無處不在,但索引行動,只是爲了使它更有意義,因爲在新的,編輯等。你正在處理一個單一的職位。

由於rails在生成路由時正在查看變量的Model/class(當給定實例變量時),變量的名稱對框架無關緊要,但使其更容易(在我看來)程序員瞭解

+0

謝謝,這解決了它,並感謝解釋,所以我可以理解這是什麼造成的,我該怎麼辦才能解決它,所以我可以在未來付出更多的關注,很好的答案 – GaoVN

相關問題