Failure/Error: click_button "Add Movie" ActionController::ParameterMissing: param is missing or the value is empty: movie
Failure/Error: click_button "Add Movie" ActionController::ParameterMissing: param is missing or the value is empty: movie
我一直在寻找其他答案,但我仍然收到缺少参数的错误。我猜这是一个回形针问题,但在搜索文档后,我找不到任何解决此问题的方法。
我的功能规范
scenario "An Admin creates a new movie" do
visit "/"
click_link "Add New Movie"```
fill_in "Title", with: "Creating first movie"
fill_in "Synopsis", with: "Lorem Ipsum"
fill_in "Year Released", with: "Date"
click_button "Add Movie"
expect(page).to have_content("Movie has been created")
expect(page.current_path).to eq(root_path)
expect(page).to have_content("Created by: #{@kyle.email}")```
end
我的电影模特
class Movie < ApplicationRecord
has_many :comments
belongs_to :admin
validates :title, presence: true
validates :synopsis, presence: true
validates :year_released, presence: true
has_attached_file :photo, styles: { medium: "300x200>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
validates_attachment_file_name :photo, matches: [/png\Z/, /jpe?g\Z/]```
我的控制器
def update
if @movie.update(movie_params)
flash[:success] = "Movie has been updated"
redirect_to @movie
else
flash.now[:danger] = "Movie has not been updated"
render :edit
end
end
private
def movie_params
params.require(:movie).permit(:title, :synopsis, :year_released, :photo)
end
我的_form.html.erb
<div class="form-group">
<div class='control-label col-md-3'>
<%= f.label :photo %>
</div>
<div class='col-md-10'>
<%= f.file_field :photo, class: "btn btn-primary btn-sl pull-left" %>
</div>
<div class='form-group'>
<div class='col-md-offset-1 col-md-11'>
<%= f.submit "Add Movie", class: "btn btn-primary btn-lg pull-right" %>
</div>
错误
Failure/Error: click_button "Add Movie"
ActionController::ParameterMissing:
param is missing or the value is empty: movie```
如果需要,我的 Github。
我认为那是因为您在 strong_params.
中使用了 require
我将您的代码更改为
def movie_params
params.fetch(:movie, {}).permit(:title, :synopsis, :year_released, :photo)
end
并通过测试。
[retgoat@iMac-Roman ~/temp/moviesmoviesmovies]$ git:(development) rspec spec/features/creating_movies_spec.rb
DEPRECATION WARNING: use_transactional_fixtures= is deprecated and will be removed from Rails 5.1 (use use_transactional_tests= instead). (called from <top (required)> at /Users/retgoat/temp/moviesmoviesmovies/spec/features/creating_movies_spec.rb:3)
..
Finished in 0.73751 seconds (files took 1.91 seconds to load)
2 examples, 0 failures
我也在浏览器中尝试过,一切都按预期进行——我看到了验证错误。
文档是 here
that post 也很有用。
我一直在寻找其他答案,但我仍然收到缺少参数的错误。我猜这是一个回形针问题,但在搜索文档后,我找不到任何解决此问题的方法。
我的功能规范
scenario "An Admin creates a new movie" do
visit "/"
click_link "Add New Movie"```
fill_in "Title", with: "Creating first movie"
fill_in "Synopsis", with: "Lorem Ipsum"
fill_in "Year Released", with: "Date"
click_button "Add Movie"
expect(page).to have_content("Movie has been created")
expect(page.current_path).to eq(root_path)
expect(page).to have_content("Created by: #{@kyle.email}")```
end
我的电影模特
class Movie < ApplicationRecord
has_many :comments
belongs_to :admin
validates :title, presence: true
validates :synopsis, presence: true
validates :year_released, presence: true
has_attached_file :photo, styles: { medium: "300x200>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
validates_attachment_file_name :photo, matches: [/png\Z/, /jpe?g\Z/]```
我的控制器
def update
if @movie.update(movie_params)
flash[:success] = "Movie has been updated"
redirect_to @movie
else
flash.now[:danger] = "Movie has not been updated"
render :edit
end
end
private
def movie_params
params.require(:movie).permit(:title, :synopsis, :year_released, :photo)
end
我的_form.html.erb
<div class="form-group">
<div class='control-label col-md-3'>
<%= f.label :photo %>
</div>
<div class='col-md-10'>
<%= f.file_field :photo, class: "btn btn-primary btn-sl pull-left" %>
</div>
<div class='form-group'>
<div class='col-md-offset-1 col-md-11'>
<%= f.submit "Add Movie", class: "btn btn-primary btn-lg pull-right" %>
</div>
错误
Failure/Error: click_button "Add Movie"
ActionController::ParameterMissing:
param is missing or the value is empty: movie```
如果需要,我的 Github。
我认为那是因为您在 strong_params.
中使用了require
我将您的代码更改为
def movie_params
params.fetch(:movie, {}).permit(:title, :synopsis, :year_released, :photo)
end
并通过测试。
[retgoat@iMac-Roman ~/temp/moviesmoviesmovies]$ git:(development) rspec spec/features/creating_movies_spec.rb
DEPRECATION WARNING: use_transactional_fixtures= is deprecated and will be removed from Rails 5.1 (use use_transactional_tests= instead). (called from <top (required)> at /Users/retgoat/temp/moviesmoviesmovies/spec/features/creating_movies_spec.rb:3)
..
Finished in 0.73751 seconds (files took 1.91 seconds to load)
2 examples, 0 failures
我也在浏览器中尝试过,一切都按预期进行——我看到了验证错误。
文档是 here
that post 也很有用。