2016-06-30 12 views
0

コントローラを使用して新しいフィールドを更新する方法を教えてください。 以下は私のコードです。ネストされたフォームレールコントローラエラーを作成する

これはedit.html.erbです:

<%= form_for @drama, url: {action: "update"} do |f| %> 
    <%= f.nested_fields_for :trailerlinks do |ff| %> 
    <%= ff.remove_nested_fields_link %> 
    <%= ff.text_field :name %> 

    <%= f.add_nested_fields_link :trailerlinks %> 

    <% end %> 
    <%= f.submit %> 
<% end %> 

そして、このようなコントローラ:

def create 
@drama = Drama.friendly.find(params[:drama_id]) 
@link = @drama.trailerlinks.new(drama_params) 

    if @link.save 
     flash[:success] = "Your drama was created succesfully." 
     redirect_to drama_path(@drama) 
    else 
     render :new 
    end 

end 

def update 
    i = 0 
    until i = 1 
    @link = @drama.trailerlinks.new(trailer_params[:trailerlinks]["#{i}"]) 
    @link.save 
    i += 1 
    end 

    respond_to do |format| 
    if @link.save 
    flash[:success] = "Your trailer was edited 123." 
    end 
end 

private 

def trailer_params 
    params.require(:trailerlink).permit(:name, :traurl) 
end 

Dramaモデル:

class Drama < ActiveRecord::Base 
    has_many :trailerlinks 
    accepts_nested_attributes_for :trailerlinks, allow_destroy: true 
end 

Trailerlinkモデル:

class Trailerlink < ActiveRecord::Base 
    belongs_to :drama 
end 
+0

正確なエラーは何ですか? – Andolasoft

答えて

0

すぐに問題はuntil i = 1です。これはuntil i == 1です。しかし、なぜあなたはループを実行する必要がありますか?フォームでの適切add_nested_fields_link仕事は、アプリケーションが新しいレコードと古いレコードの何を推測することができるはずとあなたのような何かを行うことができるようにしたい場合ので:

def update 
    if @drama.update(drama_params) 
    # do something here, it saved 
    else 
    # do something else, it failed 
    end 
end 

private 
    def drama_params 
    params.require(:drama).permit(trailerlinks_attributes: [:name, :traurl]) 
    end 

UPDATE 破壊し、更新できるようにするには既存のレコードのうち、次のようにすることができます。

def drama_params 
    params.require(:drama).permit(trailerlinks_attributes: [:name, :traurl, :id, :_destroy]) 
    end 
+0

Trailerlinkの未知の属性 'trailerlinks_attributes'はなぜですか? – User9123

+0

'drama_params'の結果を表示できますか? trailerlinks_attributes => {} [2] PRY(#)> – oreoluwa

+0

[1] PRY(#)>は 不許可パラメータtrailer_params? – User9123

関連する問題