在Rails控制器和放大器中同时在两个不相关的表中创建数据。形式

时间:2016-06-29 16:54:52

标签: ruby-on-rails ruby-on-rails-4

我正在使用此设计制作术语翻译应用程序: database design Lang模型用于存储语言数据(如En,de,Chinese..etc)。 术语模型用于存储术语数据(如World Bank,Tesla..etc)。 翻译模型用于存储翻译数据,将术语模型中的两个术语ID作为一对术语翻译关联起来。

三个模型中的任何两个都没有关联。

现在我的问题在于翻译#new我无法同时创建翻译数据(两个新术语'ID)和两个新术语。

翻译控制器:

class TranslationsController < ApplicationController
    
    def new
        @translation = Translation.new
        @term1 = Term.new
        @term2 = Term.new
        @translation.term1_id = @term1.id
        @translation.term2_id = @term2.id
    end
    
    def create
        @translatioin = Translation.new(translation_params)
        @term1 = Term.new(term_params)
        @term2 = Term.new(term_params)
        @translation.term1_id = @term1.id
        @translation.term2_id = @term2.id
        if @translation.save
            flash[:success] = "Term translation created successfully!"
            redirect_to translations_path
        else
            render 'new'
        end
    end
    
    def index
        @translations = Translation.all
    end
    
    private
    def translation_params
        params.require(:translation).permit(:id, :term1_id, :term2_id)
    end
    
    def term_params
        params.require(:term).permit(:id, :lang_id, :name)
    end
end

翻译视图中的

new.html.erb:

<div class="container">
    <div class="row">
        <div class="col-md-12">
            <h2>Term Translation</h2>
            <%= form_for @translation do |f| %>
                <%= fields_for @term1 do |m| %>
                    <h4>Term 1</h4>
                    <div class="form-group">
                        <%= m.label 'Original Language' %>
                        <%= m.collection_select :lang_id, Lang.order(:name), :id, :name, {prompt: "Select Language"}, {class: "form-control"} %>
                    </div>
                    <div class="form-group">
                        <%= m.label 'Term' %>
                        <%= m.text_field :name, class: 'form-control' %>
                    </div>
                <% end %>
                <%= fields_for @term2 do |n| %>
                    <h4>Term 2</h4>
                    <div class="form-group">
                        <%= n.label 'Destination Language' %>
                        <%= n.collection_select :lang_id, Lang.order(:name), :id, :name, {prompt: "Select Language"}, {class: "form-control"} %>
                    </div>
                    <div class="form-group">
                        <%= n.label 'Translated Term' %>
                        <%= n.text_field :name, class: 'form-control' %>
                    </div>
                <% end %>
                
                <br>
                <%= f.submit 'Create', class: 'btn btn-primary' %>
                <br>
            <% end %>
            
        </div>
    </div>
</div>

运行代码后,结果是“param丢失或值为空:翻译”。

我还发现控制台消息显示只发送了一个术语的数据: 参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“zoV5mhJTT4ESicgMe76 + KtExlSMGDR8W9lgcV1idwkrSvC77vDO1mfLK4gzTx0LPiXrlMjsw + MGpEWQ3tJiA0w ==”,“term”=&gt; {“lang_id”=&gt;“9”,“name”= &gt;“Weltbank”},“commit”=&gt;“创建”}

我未能同时保存两个术语和一个翻译记录。请让我知道如何修改我的代码。

0 个答案:

没有答案