-1

ユーザーがプロジェクトを送信できるアプリがあります。フィールドごとに、新しいデータをデータベースに入れるか、渡されたプロジェクトから古いデータを選択してそのフィールドに入力するかを選択できます。

新しいビューのこのコードでこれを機能させるのに問題があります:

<%= form_for(@technol) do |tech| %>
<div class="field">
    <%= tech.label :tech %><br />
    <%=  tech.text_field :new_tech, :maxlength => 30 %><br />

    OR<br />

    <%= collection_select(:technols, :id, @all_technols, :id, :tech, {}, {:multiple => true} ) %>
  </div>
<%end%>

ここに私の新しい作成アクションがあります:

新しい

def new
    @project = Project.new
@technol = Technol.new(params[:tech])

@all_technols = Technol.all
tech_ids = params[:technols][:id].reject(&:blank?) unless params[:technols].nil?


@project_technol = @project.projecttechnols.build

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @project }
    end
  end

作成

def create
    @all_technols = Technol.all
    @project = Project.new(params[:project])
@technol = Technol.new(params[:tech])


    @project.client = params[:new_client] unless params[:new_client].blank?
    @project.project_owner = params[:new_project_owner] unless params[:new_project_owner].blank?

    @technol.tech = params[:new_tech] unless params[:new_tech].blank?

    @project.role = params[:new_role] unless params[:new_role].blank?
    @project.industry = params[:new_industry] unless params[:new_industry].blank?
    @project.business_div = params[:new_business_div] unless params[:new_business_div].blank?


    params[:technol].each_value do |tech|

    technology = Technol.find_or_create_by_tech(tech.strip)

    @project_technol = @project.projecttechnols.build(:technol_id => technology.id) 

  end

    respond_to do |format|
      if @project.save
        format.html { redirect_to @project, notice: 'Project was successfully created.' }
        format.json { render json: @project, status: :created, location: @project }
      else
        format.html { render action: "new" }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

このコードでは、新しいプロジェクトの作成ページを開こうとすると、次のエラーが発生します。

NoMethodError in Projects#new

line #261 raised:

undefined method `new_tech' for #<Technol id: nil, tech: nil, created_at: nil, updated_at: nil>
Extracted source (around line #261):

258: <%= form_for(@technol) do |tech| %>
259: <div class="field">
260:     <%= tech.label :tech %><br />
261:     <%=  tech.text_field :new_tech, :maxlength => 30 %><br />
262: 
263: OR<br />
264: 

何か案は?私はレール初心者なので、答えようとするときはこれを覚えておいてください。どんな助けでも大歓迎です。前もって感謝します

4

1 に答える 1

0

API を確認してくださいtext_field

text_field(object_name, method, options = {})

最初のパラメータはobject_namewhich is here であり:tech、 not:new_techです。反復しているオブジェクト:new_techの属性でもメソッドでもないため、失敗します。tech

入力フィールドをラベルの属性と同じ属性に一致させる

<%= tech.label :tech %><br />
<%= tech.text_field :tech, :maxlength => 30 %>
于 2012-10-04T08:35:13.810 に答える