http://guides.rubyonrails.org/getting_started.htmlのガイドから始めました。私は正常にそれを取得し、実行しています。これまでのところ私はいくつかの調整を行った(コントローラの命名など)。このチュートリアルでは、モデルの関係を更新する方法については触れていませんが、これは現在私が苦労している点です。Rails 5:編集ビューで更新の代わりに関連付けられたリレーショントリガーを作成
モデル/ game.rb
class Game < ApplicationRecord
has_many :achievements, dependent: :destroy
validates :title, presence: true,
length: { minimum: 5 }
end
モデル/ achievement.rb
class Achievement < ApplicationRecord
belongs_to :game
end
私のゲームのアップデートは、魔法のように動作します。
コントローラ/ game_controller.rb
def edit
@game = Game.find(params[:id])
end
def update
@game = Game.find(params[:id])
if @game.update(game_params)
redirect_to @game
else
render 'edit'
end
end
private
def game_params
params.require(:game).permit(:title, :total_gs_points)
end
だから私は自分の成果に転送しようとした
コントローラ/ achievements_controller.rb
def edit
@game = Game.find(params[:game_id])
@achievement = @game.achievements.find(params[:id])
end
def update
@game = Game.find(params[:game_id])
@achievement = @game.achievements.find(params[:id])
# @achievement = Achievement.find(params[:id])
if @achievement.update(achievement_params)
redirect_to game_achievements_path(@game)
else
render 'edit'
end
end
private
def achievement_params
params.require(:achievement).permit(:id, :title, :description, :status, :hint, :pinned, :gs_points)
end
しかしそこに、私は私の編集を呼び出すたびにそれはcreateイベントを発生させます。ビュー/実績/ edit.html.erbで
Started GET "/games/1/achievements/3/edit" for 127.0.0.1 at 2017-06-06 15:57:45 +0200
Processing by AchievementsController#edit as HTML
Parameters: {"game_id"=>"1", "id"=>"3"}
Game Load (0.3ms) SELECT `games`.* FROM `games` WHERE `games`.`id` = 1 LIMIT 1
Achievement Load (0.3ms) SELECT `achievements`.* FROM `achievements` WHERE `achievements`.`game_id` = 1 AND `achievements`.`id` = 3 LIMIT 1
Rendering achievements/edit.html.erb within layouts/application
Rendered achievements/_form.html.erb (3.2ms) [cache miss]
Rendered achievements/edit.html.erb within layouts/application (8.2ms)
Completed 200 OK in 28ms (Views: 23.9ms | ActiveRecord: 0.6ms)
マイ含まフォーム_form.html.erbは、次のようになります。私のedit.html.erbで
<%= form_for([@game, @game.achievements.build]) do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :description %><br>
<%= f.text_field :description %>
</p>
<p>
<%= f.label :status %><br>
<%= f.select :status, options_for_select([ 'open', 'claimed' ], 'open') %>
</p>
<p>
<%= f.label :hint %><br>
<%= f.text_area :hint %>
</p>
<p>
<%= f.label :pinned %><br>
<%= f.check_box :hint %>
</p>
<p>
<%= f.label :gs_points %><br>
<%= f.select :gs_points, options_for_select([ 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100 ], 50) %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
、私は正しい実績情報を取得し、なぜフィールドがあらかじめ充填されていないのかわかりません。送信ボタンのテキストは、毎回あなたのルートが同じような外観を提出ん&よろしく、 mybecks
私の 'routes.rb'ファイルは正確にあなたのように見えます。私もあなたのform_forの変種を試しましたが、それを使って、私は 'ゲーム'を作ることができません...そして、私が既存の成果でそれを実行すると、編集画面は変わりませんでした。 – mybecks
@mybecks私はあなたの質問を誤解しているかもしれないと思います。 "@ game.achievements.build"を使用すると、ゲームにリンクされた新しいアチーブメントが作成されます。 "<%form_for([@game、@achievement])do | f |%>"のような形式を試すことができます。あなたが遭遇しているものと同様の問題を抱えていた人がいたところで、この答えをチェックしてください:https://stackoverflow.com/questions/2034700/form-for-with-nested-resources –
そのリンクを作成してくれてありがとう。私は最終的にそれが働いて、ラインはトリックを行った。 '<%= form_for([@ゲーム、@achievement || = @ game.achievements.build])do | f | %> ' – mybecks