2

在我看来,用户需要使用 collection_select 输入一些数据。

我知道可以params[]在控制器中访问数据。

但是我如何访问用户选择了一个值之后的值呢?

这就是我想要做的(不起作用):

<%= f.collection_select :photo_type, Upload::PHOTOTYPE, :to_s, :to_s, :include_blank => false, :id => "phototype"%>
<%= f.hidden_field :photo_id, :value => Photo.find_by_type(params[:photo_type]).id %>

:photo_type我的问题是如何访问collection_select

编辑

我曾尝试使用 jQuery,但我不知道如何将 js 变量导出到视图:

<script type="text/javascript">
    $("#phototype").change(function() {
        var phototype = $('#phototype').val()
    });
 </script>

更新

我的数据库中有两个表:

表格1:photos

  1. ID
  2. photo_type_id(参考表中idphoto_types

表 2:photo_types

  1. ID
  2. 照片类型

用户可以从下拉菜单中选择照片类型,我想通过用户输入photo_type_idphoto_types表格中找到 ,然后将 插入photo_type_idphotos表格中

根据codeit,我改变了我的控制器是这样的:

def create
    @photo = photo.new(params[:photo])
    photo_type_id = PhotoType.find_by_type(params[:photo_type]).id
    respond_to do |format|
      if @photo.save
        format.html { redirect_to @photo, notice: 'photo was successfully created.' }
        format.json { render json: @photo, status: :created, location: @photo }
      else
        format.html { render action: "new" }
        format.json { render json: @photo.errors, status: :unprocessable_entity }
      end
    end
end
4

1 回答 1

1

我认为您正在使用hidden_field将价值发送给下一个操作。为什么不在控制器动作中做同样的事情:

  def create
    @photo = Photo.new(params[:photo])
    @photo.photo_type_id = PhotoType.find_by_type(params[:photo][:photo_type]).id
    respond_to do |format|
      if @photo.save
        format.html { redirect_to @photo, notice: 'photo was successfully created.' }
        format.json { render json: @photo, status: :created, location: @photo }
      else
        format.html { render action: "new" }
        format.json { render json: @photo.errors, status: :unprocessable_entity }
      end
    end
  end

看法:

  <%= f.collection_select :photo_type, Upload::PHOTOTYPE, :to_s, :to_s, :include_blank => false, :id => "phototype"%>

建议:标准做法是避免在视图中查询。

于 2013-02-20T18:39:47.033 回答