質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

5回答

761閲覧

Railsの投稿の編集でのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/08/09 00:59

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
Railsで投稿の編集の作成しようとしているのですが、下記のエラーが出て困っています。過去の質問から<% @tweet = Tweet.new unless @tweet %>とビューファイルに打ち込んでも、newアクションが動作してしまい、編集ができません。アドバイスを頂きたいです。

発生している問題・エラーメッセージ

エラーメッセージ

First argument in form cannot contain nil or be empty

該当のソースコード

<div class="container"> <%= form_for @tweet do |f| %>←ここがひっかかてます <h1>編集する</h1> <div class="field"> ```ここに言語名を入力 ソースコード ``` コントローラー class TweetsController < ApplicationController

def index
@tweets=Tweet.all
end

def new
@tweet=Tweet.new
end

def create
@tweet=Tweet.new(tweet_params)
@tweet.save
end

def edit
@tweet=Tweet.find_by(id: params[:id])
end

def update
@tweet=Tweet.find_by(id: params[:id])
@tweet.update(tweet_params)
@tweet.save
end

def destroy
end

private
def tweet_params
params.require(:tweet).permit(:name, :description, :picture)
end

end

ビュー

<div class="container"> <%= form_for @tweet do |f| %> <h1>編集する</h1> <div class="field"> <p>タイトル</p> <%= f.text_field :name %> </div> <div class="field"> <p>コメント</p> <%= f.text_field :description %> <div class="field"> <%= f.file_field :picture %> </div>

<%= f.submit "編集" %>

</div>

<% end %>

ルート
Rails.application.routes.draw do
root 'tweets#index'
get 'tweets/new' =>'tweets#new'
post 'tweets' =>'tweets#create'
get 'tweets/:id/edit' =>'tweets#edit'
post 'tweets/:id/update' =>'tweets#update'
post 'tweets/:id/destroy' =>'tweets#destroy'
devise_for :users

end

試したこと

<% @tweet = Tweet.new unless @tweet %>をeditビューファイルに書き込む

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

<code> <div class="container" > <% @tweets.each do |t| %> </br></br><%= t.name %></br> <%= t.description %></br> <%= image_tag (t.picture_url) %></br> <%= link_to "編集", edit_tweet_path(:id)%> <% end %> </div> </code> の <%= link_to "編集", edit_tweet_path(:id)%> ↓ <%= link_to "編集", edit_tweet_path(t.id)%> にすることで解決しました。```ここに言語を入力 コード ```

投稿2019/08/09 07:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

<code> <div class="container" > <% @tweets.each do |t| %> </br></br><%= t.name %></br> <%= t.description %></br> <%= image_tag (t.picture_url) %></br> <%= link_to "編集", edit_tweet_path(:id)%> <% end %> </div> </code> の <%= link_to "編集", edit_tweet_path(:id)%> ↓ <%= link_to "編集", edit_tweet_path(t.id)%> にすることで解決しました。

投稿2019/08/09 07:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

<code> <div class="container" > <% @tweets.each do |t| %> </br></br><%= t.name %></br> <%= t.description %></br> <%= image_tag (t.picture_url) %></br> <%= link_to "編集", edit_tweet_path(:id)%> <% end %> </div> </code>


<code>
<%= link_to "編集", edit_tweet_path(:id)%>
</code>

<code>
<%= link_to "編集", edit_tweet_path(t.id)%>
</code>

で解決しました。

投稿2019/08/09 07:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

edit で使っている params が怪しい気がします。
indexから来るのだと思いますが、index の viewも開示して下さい

投稿2019/08/09 06:10

winterboum

総合スコア23284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/09 07:15

こちらindexのビューです <div class="container" > <% @tweets.each do |t| %> </br></br><%= t.name %></br> <%= t.description %></br> <%= image_tag (t.picture_url) %></br> <%= link_to "編集", edit_tweet_path(:id)%> <% end %> </div>
winterboum

2019/08/09 07:33

質問本文に<code>で囲んで載せ直しておいて下さい。 <%= link_to "編集", edit_tweet_path(:id)%>  を <%= link_to "編集", edit_tweet_path(t)%> にしてみてください
退会済みユーザー

退会済みユーザー

2019/08/09 07:41

<%= link_to "編集", edit_tweet_path(:id)%> ↓ <%= link_to "編集", edit_tweet_path(t.id)%> にしたらできました。以後の質問からは<code>で囲むようにします。
winterboum

2019/08/09 07:46

t だけでも t.idを送ってくれます。 ご参考までに
guest

0

<% @tweet = Tweet.new unless @tweet %>とビューファイルに打ち込んでも、newアクションが動作してしまい、編集ができません。

そもそも、@tweetnilということは、@tweet=Tweet.find_by(id: params[:id])での取得に失敗しているということであって、IDが存在しない以上編集できなくてしかるべき状況です。

@tweet=Tweet.find(params[:id])として、見つからないときは例外で飛ばしてしまうようにしましょう。

投稿2019/08/09 01:04

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/09 02:12 編集

@tweet=Tweet.find(params[:id])に直しましたが、今度はCouldn't find Tweet with 'id'=:idと出ました。 https://programming-beginner-zeroichi.jp/articles/45 上記を参考にルートファイルはresourcesを使ってまとめました。rails cにてTweet.find(id番号)では出てくるのですが、find(params[:id])ではエラーが出てしまいます。
maisumakun

2019/08/09 02:33 編集

きちんと、/tweets/1/editのように、IDを入れたアドレスからアクセスしていますか?
退会済みユーザー

退会済みユーザー

2019/08/09 07:17

手打ちでURLから行けばアクセスできますが、リンクからは「:id」と表示され、番号が表示されないです
退会済みユーザー

退会済みユーザー

2019/08/09 07:42

indexビューの <%= link_to "編集", edit_tweet_path(:id)%> ↓ <%= link_to "編集", edit_tweet_path(t.id)%> に変えたらできました。わざわざ回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問