shunta9922
@shunta9922 (shimo shun)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ArgumentError

解決したいこと

Ruby on RailsでtwitterのようなWebアプリをつくっています。
edit_acitonで投稿を編集する機能を実装した際、ArgumentErrorが発生し手を焼いています。
edit_actionの引数を何度も確認したのですがどこに原因があるのかわからずじまいで、ご教授お願いします

発生している問題・エラー

ArgumentError in Movies#edit
Showing C/views/movies/edit.html.erb where line #4 raised:

wrong number of arguments (given 1, expected 0)
Extracted source (around line #4):
2
3
4
5
6
7

    <div class="container">
     <h1 class="form-heading">編集する</h1>
        <%= form_with @movie,local:true do |f| %>
            <div class="form" >
                <div class="form-body">
                    <% @movie.errors.full_messages.each do |message| %>

該当するソースコード

edit.html.erb

h1 class="form-heading">編集する</h1>
        <%= form_with @movie,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

movie_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("/movies")
     flash[:notice]="変更しました"
   else
     render("movies/edit")
   end
  end
0

1Answer

Showing C/views/movies/edit.html.erb where line #4 raised:
wrong number of arguments (given 1, expected 0)

とエラーに出ているように、 views/movies/edit.html.erb の4行目で引数の個数が間違っています。

<%= form_with @movie,local:true do |f| %>

<%= form_with model: @movie, local: true do |f| %>

に直してください。

form_with @movie, local: true は通常の引数が1個(@movie)でキーワード引数が1個(local)とカウントされますが、 form_with は通常の引数を受け取れません。 form_with model: @movie, local: true のようにすべてキーワード引数で渡す必要があります。

1Like

Comments

  1. @shunta9922

    Questioner

    回答ありがとうございます。おかげでArgumentErrorが解決できました。form_withの引数に関してまだまだ勉強が足りないと改めて理解でき大変感謝しています。

Your answer might help someone💌