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

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

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

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1446閲覧

親のない、レコードの更新について

NishidaRyu416_

総合スコア113

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2016/12/13 08:46

編集2016/12/14 08:13

#回答よろしくお願いします
エラーのページ

ruby

1<div class="col-md-6 col-md-offset-3"> 2 <h1>テスト作成</h1> 3 <%= form_tag words_path, method: :create do %> 4 <%= fields_for "words[]",@words, index: nil do |f| %> 5 <%= render 'shared/error_messages', object: f.object %> 6 7 <%= f.hidden_field :user_id, value:current_user.id %> 8 9 <%= f.label :title,"タイトル"%> 10 <%= f.text_field :title, class: 'form-control' %> 11 12 <%= f.label :question,"問題"%> 13 <%= f.text_area :question, class: 'form-control' %> 14 15 <%= f.label :answer, "回答" %> 16 <%= f.text_area :answer, class: 'form-control' %> 17 18 <%= f.label :image,"ホーム画像" %> 19 <%= f.file_field :image,class: 'form_control'% 20 21 <% end %> 22 23 <div id='key'></div> 24 <%= link_to '問題を追加',add_path, remote: true ,class: 'btn btn-success'%> 25 <br> 26 <%= submit_tag '完了',class: "btn btn-primary" %> 27 <% end %> 28 </div> 29</div> 30 31 32

##バリデーションを描いた後、上のページだけエラーが出るようになった。

ruby

1class Word < ActiveRecord::Base 2 3 validates :question,length: { minimum: 1 } 4 validates :answer,length: { minimum: 1 } 5 validates :answer ,length:{minimum:1} 6 validates :title ,length:{minimum:1} 7 8 acts_as_taggable 9 belongs_to :group 10 belongs_to :user 11 has_many :favorites, dependent: :destroy 12 13 def favorite?(user) 14 favorites.where(user_id: user.id).exists?# exists?の説明 user.idが一致する人を探す。いたら、true いなかったら false 15 end 16end

コントローラー

ruby

1def new 2 @words = Word.new 3 end 4 5 def create 6 word=words_params 7 word.each do |word| 8 @word = Word.create word 9 end 10 if @word.save 11 flash[:success] = "success!" 12 redirect_to @word 13 else 14 render 'new' 15 end 16 end

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

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

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

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

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

moke

2016/12/14 02:47

少し情報が足りない気がします。controllerもさらしてください。あとvalidatesを全て削ってcreateできるか試してください
NishidaRyu416_

2016/12/14 04:48

もちろん、バリデーションを書かなければ動きます。
moke

2016/12/14 05:24

@wordを@wordsにすれば動くとは思いますが…
moke

2016/12/14 05:24

過去の質問nested_form_fieldsというgemについてというのを見てやりたいことがわかりました。親のないレコードの複数更新をしたいのですね。
moke

2016/12/14 05:30

rails(レールズ)はその名の通りレールから外れると大変です。親のないレコードを一括更新したいで再度質問を立てた方がいいかもしれません。
NishidaRyu416_

2016/12/14 08:12

ありがとうございます。 @wordsにしたら、うまくいきました。
moke

2016/12/16 01:18

今更ここまで作りこんだものを変える気はないでしょうが、次やる時の指針にでもなればと回答をしときますねー
guest

回答1

0

ベストアンサー

ここに書きましたか
では方針だけでも
このままだとvalidationに失敗したレコードがどれかわからないと思うので

nested_formを使い一気にやる方法

①無理やり特に必要のない親レコードを作る作戦
word_basesとか作ってword_base_idをwordsに追加word_base_idは全部1とかpostごとに採番するとかテキトーで

②どうせ更新するときは〇〇だろ作戦
このケースの場合投稿日と投稿者ごとにしか更新しないだろ、とかあたりをつけてそれを親にして
posted_day,posted_user_idをComposite Primary Keysを使ってPrimary Keyにして紐付ける

③ActiveModelで親Modelを作って登録後破棄
登録更新時だけ親を作りゴミデータを残さない
親Model名_attributes methodを定義する必要がある

この中でいうと②がオススメですかね

投稿2016/12/16 01:17

moke

総合スコア2241

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

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

NishidaRyu416_

2016/12/16 13:12

いや、レコードもきちんと表示されます、完璧な解決策だったと思ったのですが・・
moke

2016/12/17 01:42

複数登録する際に一番上のレコードのバリデーションを崩し 他を通るようにしてもsuccessって出て保存されていないような気がしますが…
moke

2016/12/17 06:42

そうですか、ならいいのですが この例でいくと例えば①つ目のレコードの:questionを空欄にして(バリデーションを崩して) 登録しようとすると①つ目が登録されずに②つ目いこうだけ登録されsuccessだけ表示されて なぜ①つ目が登録されなかったのかユーザーに分からないような気がするのですが
NishidaRyu416_

2016/12/17 06:50

そうですね、それは問題ですね。 バリデーションだけでなく、jsを使えばどうですかね?
NishidaRyu416_

2016/12/17 06:50

そもそも、ボタンを押せないように、隠す等 しかし、jsがわからないんで、できませんが・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問