2013-12-24 2 views
0

У меня есть следующий контроллер:Rails Вложенные формы не Сохранение или Проверка на обновления

class Admin::ArticleChangeRequestsController < Admin::ApplicationController 
    before_action :set_order, only: :index 
    before_action :set_article_change_request, only: [:edit, :delete] 
    helper SortClassHelper 

    protected 
    def set_order 
    if params[:column].present? 
     @column = params[:column] 
    else 
     @column = 'created_at' 
    end 

    if params[:sort].present? 
     @sort = params[:sort] 
    else 
     @sort = 'desc' 
    end 

    @order = @column.to_s + ' ' + @sort.to_s 
    end 

    def set_article_change_request 
    @article_change_request = ArticleChangeRequest.find(params[:id]) 
    end 

    def article_change_request_params 
    params[:article_change_request].permit(:title, :change, :article) 
    end 

    public 
    def index 
    @article_change_requests = ArticleChangeRequest.order(@order).page params[:page] 
    end 

    def edit 
    if request.patch? 
     if @article_change_request.update(article_change_request_params) 
     redirect_to :admin_article_change_requests, :flash => { success: t(:article_change_request_updated) } 
     end 
    end 
    end 

    def delete 
    if request.post? 
     if @article_change_request.delete 
     flash[:success] = t(:article_change_request_deleted) 

     render :json => { :success => true } 
     else 
     render :json => { :success => false } 
     end 
    end 
    end 
end 

и добавили:

accepts_nested_attributes_for :article 

в моей ArticleChangeRequest модели. Однако всякий раз, когда я нажимаю «Обновить», он не проверяет и не сохраняет статью. Вот моя форма:

<%= form_for @article_change_request, { :url => :admin_article_change_request_edit } do |f| %> 
    <%= render partial: 'form', locals: { f: f } %> 
    <div> 
    <%= f.submit t(:update), class: 'submit' %> 
    </div> 
<% end %> 

<% if @article_change_request.errors.any? %> 
    <div class="message errormsg"> 
    <p> 
     <%= t :there_is %> <%= pluralize @article_change_request.errors.count, t(:error) %> 
    </p> 
    </div> 
<% end %> 
<div class="container"> 
    <%= f.label :title, t(:change_request_title) + ':' %> 
    <%= f.text_field :title, size: 40, class: 'text' %> 
    <% unless @article_change_request.errors[:title].blank? then %> 
    <span class="note error"> 
    <% @article_change_request.errors[:title].each do |e| %> 
     <% if e == @article_change_request.errors[:title].last %> 
     <%= e %> 
     <% else %> 
     <%= e %>, 
     <% end %> 
    <% end %> 
    </span> 
    <% end %> 
</div> 
<div class="container"> 
    <%= f.label :change, t(:change_request_change) + ':' %> 
    <%= f.text_area :change, size: '100x5' %> 
    <% unless @article_change_request.errors[:change].blank? then %> 
    <span class="note error"> 
    <% @article_change_request.errors[:change].each do |e| %> 
     <% if e == @article_change_request.errors[:change].last %> 
     <%= e %> 
     <% else %> 
     <%= e %>, 
     <% end %> 
    <% end %> 
    </span> 
    <% end %> 
</div> 
<hr> 
<%= f.fields_for :article do |a| %> 
<div class="container"> 
    <%= a.label :category_id, t(:article_category) + ':' %> 
    <%= a.select :category_id, [''].concat(Category.select_options) %> 
    <% unless @article_change_request.article.errors[:category_id].blank? then %> 
    <span class="note error"> 
    <% @article_change_request.article.errors[:category_id].each do |e| %> 
     <% if e == @article_change_request.article.errors[:category_id].last %> 
     <%= e %> 
     <% else %> 
     <%= e %>, 
     <% end %> 
    <% end %> 
    </span> 
    <% end %> 
</div> 
<div class="container"> 
    <%= a.label :title, t(:article_title) + ':' %> 
    <%= a.text_field :title, size: 40, class: 'text' %> 
    <% unless @article_change_request.article.errors[:title].blank? then %> 
    <span class="note error"> 
    <% @article_change_request.article.errors[:title].each do |e| %> 
     <% if e == @article_change_request.article.errors[:title].last %> 
     <%= e %> 
     <% else %> 
     <%= e %>, 
     <% end %> 
    <% end %> 
    </span> 
    <% end %> 
</div> 
<div class="container"> 
    <%= a.label :slug, t(:article_slug) + ':' %> 
    <%= a.text_field :slug, size: 40, class: 'text slug' %> 
    <% unless @article_change_request.article.errors[:slug].blank? then %> 
    <span class="note error"> 
    <% @article_change_request.article.errors[:slug].each do |e| %> 
     <% if e == @article_change_request.article.errors[:slug].last %> 
     <%= e %> 
     <% else %> 
     <%= e %>, 
     <% end %> 
    <% end %> 
    </span> 
    <% end %> 
</div> 
<div class="container"> 
    <%= a.label :article_type, t(:article_type) + ':' %> 
    <%= a.select :article_type, [''].concat(ArticleType.select_options) %> 
    <% unless @article_change_request.article.errors[:article_type].blank? then %> 
    <span class="note error"> 
    <% @article_change_request.article.errors[:article_type].each do |e| %> 
     <% if e == @article_change_request.article.errors[:article_type].last %> 
     <%= e %> 
     <% else %> 
     <%= e %>, 
     <% end %> 
    <% end %> 
    </span> 
    <% end %> 
</div> 
<div id="article_content_container" class="container" style="display: none;"> 
    <%= a.label :content, t(:article_content) + ':' %> 
    <%= a.text_area :content, size: '100x40', class: 'wysiwyg' %> 
    <% unless @article_change_request.article.errors[:content].blank? then %> 
    <span class="note error"> 
    <% @article_change_request.article.errors[:content].each do |e| %> 
     <% if e == @article_change_request.article.errors[:content].last %> 
     <%= e %> 
     <% else %> 
     <%= e %>, 
     <% end %> 
    <% end %> 
    </span> 
    <% end %> 
</div> 
<div id="article_link_container" class="container" style="display: none;"> 
    <%= a.label :link, t(:article_link) + ':' %> 
    <%= a.text_field :link, size: 40, class: 'text' %> 
    <% unless @article_change_request.article.errors[:link].blank? then %> 
    <span class="note error"> 
    <% @article_change_request.article.errors[:link].each do |e| %> 
     <% if e == @article_change_request.article.errors[:link].last %> 
     <%= e %> 
     <% else %> 
     <%= e %>, 
     <% end %> 
    <% end %> 
    </span> 
    <% end %> 
</div> 
<div class="container"> 
    <%= a.label :summary, t(:article_summary) + ':' %> 
    <%= a.text_area :summary, size: '100x5' %> 
    <% unless @article_change_request.article.errors[:summary].blank? then %> 
    <span class="note error"> 
    <% @article_change_request.article.errors[:summary].each do |e| %> 
     <% if e == @article_change_request.article.errors[:summary].last %> 
     <%= e %> 
     <% else %> 
     <%= e %>, 
     <% end %> 
    <% end %> 
    </span> 
    <% end %> 
</div> 
<% end %> 

Может ли кто-нибудь сказать мне, почему его не подтверждают или не обновляют?

+0

Вам необходимо разрешить параметры статьи. http://stackoverflow.com/questions/19992166/rails-4-nested-form-fields-not-saving-in-database?rq=1 вопрос похож – Yana

+0

Но я не здесь: Титулы [: article_change_request ] .permit (: title,: change,: article)? – Darren

ответ

1
params[:article_change_request].permit(:title, :change, 
:article_attributes => {:category_id, :title, :slug, :article_type}) 
+0

Прохладный, как мне сделать так, чтобы связанная модель обновлялась вместо того, чтобы пытаться ее создать? – Darren

+0

<% = form_for @article_change_request, {: url =>: admin_article_change_request_edit},: html => {: method =>: put} do | f | %> – Yana

+0

Его обновление запроса на изменение, но создание новой связанной статьи в каждом сохранении. – Darren

Смежные вопросы