2013-02-20 53 views
1

在我看來,用戶需要使用collection_select輸入一些數據。在Rails視圖中爲用戶輸入分配變量

我知道可以在控制器中使用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 %> 

我的問題是我怎麼訪問的collection_select:photo_type

編輯

我已經使用jQuery嘗試,但我不知道如何將JS變量導出到視圖:

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

UPDATE

我有兩個表在我的數據庫中:

表1:photos

  1. ID
  2. photo_type_id(參照idphoto_types表)

表2:photo_types

  1. ID
  2. photo_type

用戶可以從下拉菜單中選擇照片類型,我想通過用戶輸入來查找photo_typesphoto_type_id然後將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 
+1

這裏需要一些javascript,這是一個觸發你的collection_select變化的函數,它會更新photo_id hidden_​​field的值。 – MrYoshiji 2013-02-20 18:34:50

+0

@MrYoshiji,是的,我試過了,看到更新的問題。 – 2013-02-20 19:00:40

回答

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"%> 

建議:標準的做法是避免視圖的查詢。

+0

謝謝你的回答!如果我把這個放在控制器中,是不是說我必須提交表單才能獲得ID? – 2013-02-20 18:53:55

+0

你需要提交表單並在那裏找到'id'。我不明白爲什麼你不想提交表單時使用'hidden_​​field'。 – codeit 2013-02-20 19:00:22

+0

我想在提交表單後將'photo_id'的值插入'photos'表中,但問題是:我必須在'photo_type'的另一個表中找到id。 – 2013-02-20 19:05:10