form_withのデータがdbに保存されない
Q&A
Closed
解決したいこと
Ruby on Railsで映画についてつぶやけるWebアプリをつくっています。
投稿した記事の編集機能を実装した際に、form_withで送信したparams[:content],params[:title]がnilになりdbに保存されません。
form_withのurlを指定すればよいと思い追加したのですが依然問題は解決しません。
ご指摘いただければ幸いです。
該当するソースコード
movies_controller
def edit
@movie=Movie.find_by(id: params[:id])
end
def update
@movie = Movie.find_by(id: params[:id])
@movie.content=params[:content]
@movie.title=params[:title]
if @movie.save
redirect_to movie_path(@movie)
flash[:notice]="変更しました"
else
flash[:notice]="編集に失敗しました"
render ("movies/edit")
end
end
edit.html.erb
<%= form_with(model:@movie,url: {controller: 'movies', action: 'update' },local: true) do |f| %>
<div class="form" >
<div class="form-body">
<% @movie.errors.full_messages.each do |message| %>
<div class="form-error">
<%= message %>
</div>
<% end %>
<%= f.text_field :title %>
<%= f.text_area :content %>
<%= f.submit value="保存" %>
</div>
</div>
<% end %>
routes
resources :movies do
resources :comments
collection do
get 'search'
end
end
search_movies GET /movies/search(.:format) movies#search
movies GET /movies(.:format) movies#index
POST /movies(.:format) movies#create
new_movie GET /movies/new(.:format) movies#new
edit_movie GET /movies/:id/edit(.:format) movies#edit
movie GET /movies/:id(.:format) movies#show
PATCH /movies/:id(.:format) movies#update
PUT /movies/:id(.:format) movies#update
DELETE /movies/:id(.:format) movies#destroy
schema
create_table "movies", force: :cascade do |t|
t.text "content"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.string "title"
end
50: def update
51: @movie = Movie.find_by(id: params[:id])
52: @movie.content=params[:content]
53: @movie.title=params[:title]
=> 54: binding.pry
55: if @movie.save
56: redirect_to movie_path(@movie)
<page break> --- Press enter to continue ( q<enter> to break ) --- <page break>
57: flash[:notice]="変更しました"
58:
59: else
60: flash[:notice]="編集に失敗しました"
61: render ("movies/edit")
62: end
63: end
[1] pry(#<MoviesController>)> params[:content]
=> nil
[2] pry(#<MoviesController>)> params[:title]
=> nil
0