2015-01-15 32 views
0

獲取控制器缺少PARAMS信息,這裏是控制器的ActionController :: ParameterMissing在Rails應用程序

class SubjectsController < ApplicationController 
    layout false 
    def new 
    @subject=Subject.new 
    end 
    def create 
    @subject = Subject.create(subject_params) 
    if @subject.save 
     redirect_to(:action => 'index') 
    else 
     render('new') 
    end 
    end 
    private 
    def subject_params 
    params.require(:subject).permit(:name, :position, :visible) 
    end 
end 

這裏的代碼是爲new.html.erb

<%= link_to("<< Back to List", {:action => 'index'}, :class => 'back-link') %> 

<div class="subjects new"> 
    <h2>Create Subject</h2> 

    <%= form_for(:subject, :url => {:action => 'create'}) do |f| %> 

    <table summary="Subject form fields"> 
     <tr> 
     <th>Name</th> 
     <td><%= f.text_field(:name) %></td> 
     </tr> 
     <tr> 
     <th>Position</th> 
     <td><%= f.text_field(:position) %></td> 
     </tr> 
     <tr> 
     <th>Visible</th> 
     <td><%= f.text_field(:visible) %></td> 
     </tr> 
    </table> 

    <div class="form-buttons"> 
     <%= submit_tag("Create Subject") %> 
    </div> 

    <% end %> 
</div> 
代碼

希望有人可以告訴我爲什麼得到這個錯誤:

ActionController::ParameterMissing in SubjectsController#create 
param is missing or the value is empty: subject 
Extracted source (around line #34): 
    def subject_params 
    params.require(:subject).permit(:name, :position, :visible) 
    end 
end 

感謝

+1

在創建它應該是'@subject = Subject.new(subject_params)'之前'@ subject.save' –

回答

1

請嘗試下面的一段代碼。這似乎也在軌道4中工作。

#app/views/subjects/_form.html.erb 
    <%= form_for(@subject) do |f| %> 
     <div class="field"> 
     <%= f.label :name %><br> 
     <%= f.text_field :name %> 
     </div> 
     <div class="field"> 
     <%= f.label :position %><br> 
     <%= f.text_field :position %> 
     </div> 
     <div class="field"> 
     <%= f.label :visible %><br> 
     <%= f.text_field :visible %> 
     </div> 
     <div class="actions"> 
     <%= f.submit %> 
     </div> 
    <% end %> 

    #app/controllers/subjects_controller.rb 
    class SubjectsController < ApplicationController 
     layout false 
     def new 
     @subject = Subject.new 
     end 

     def index 
     @subjects = Subject.all 
     end 

     def create 
     @subject = Subject.new(subject_params) 
     if @subject.save 
      redirect_to subjects_path 
     else 
      render :new 
     end 
     end 


     private 
     def subject_params 
     params.require(:subject).permit(:name, :position, :visible) 
     end 
    end 

檢查控制檯輸出: enter image description here

1

你可以試試這個

class SubjectsController < ApplicationController 
    layout false 

def index 
    @subjects = Subject.scoped 
end 

    def new 
    @subject=Subject.new 
    end 

    def create 
    @subject = Subject.new(subject_params) 
    if @subject.save 
     redirect_to(:action => 'index') 
    else 
     render('new') 
    end 
    end 
    private 
    def subject_params 
    params.require(:subject).permit(:name, :position, :visible) 
    end 
end 

在查看

<%= link_to("<< Back to List", {:action => 'index'}, :class => 'back-link') %> 

<div class="subjects new"> 
    <h2>Create Subject</h2> 

    <%= form_for @subject do |f| %> 

    <table summary="Subject form fields"> 
     <tr> 
     <th>Name</th> 
     <td><%= f.text_field(:name) %></td> 
     </tr> 
     <tr> 
     <th>Position</th> 
     <td><%= f.text_field(:position) %></td> 
     </tr> 
     <tr> 
     <th>Visible</th> 
     <td><%= f.text_field(:visible) %></td> 
     </tr> 
    </table> 

    <div class="form-buttons"> 
     <%= submit_tag("Create Subject") %> 
    </div> 

    <% end %> 
</div> 

在路線/config/routes.rb

resources :subjects 
+0

- 謝謝。意識到我打電話錯了網址。 –

相關問題