update user input to another table without using html form

Hey all,

Let's say you are not going to use an html form. Rather the user will input data in a third-party application that will communicate with the rails controller through http requests, but serves as a replacement to the html. In other words, it's taking the place of front end.

My question is can you update the attributes of another table, let's say studentfails table, from let's say a students controller (which has a students table) based on user input (the user input needs to be inserted in the studentfails table).

I was hoping something like this, but this doesn't work:

student.rb has_one :student_fail attr_accessor :student_fail_attribute

def find_failing_student @student = @student.find params[:id] end def update_failing_student   @student = @student.find params[:id]   @student.build_student_fail params[:student][:student_fail_attribute] end

Even for this you have to put student_fail_attribute in the html. I'm hoping there's a way where you don't have to put anything in the html. Any suggestions? Thanks for any response.

@student = @student.find params[:id]

This makes no sense to me...

Even for this you have to put student_fail_attribute in the html. I'm hoping there's a way where you don't have to put anything in the html

Are you trying to say that you want to use a get request instead of a post request? In a perfect world every request that changes the server state is a post request, but if you want to use a get request just put additional parameters in the url.

I suggest you make this work with a regular html view before worrying about the external front end.

Sharagoz -- wrote:

@student = @student.find params[:id]

This makes no sense to me...

Even for this you have to put student_fail_attribute in the html. I'm hoping there's a way where you don't have to put anything in the html

Are you trying to say that you want to use a get request instead of a post request? In a perfect world every request that changes the server state is a post request, but if you want to use a get request just put additional parameters in the url.

What do you mean by put additional parameters in the url? Thanks for the response though.

Hey all,

Let's say you are not going to use an html form. Rather the user will input data in a third-party application that will communicate with the rails controller through http requests, but serves as a replacement to the html. In other words, it's taking the place of front end.

My question is can you update the attributes of another table, let's say studentfails table, from let's say a students controller (which has a students table) based on user input (the user input needs to be inserted in the studentfails table).

I was hoping something like this, but this doesn't work:

student.rb has_one :student_fail attr_accessor :student_fail_attribute

def find_failing_student @student = @student.find params[:id] end def update_failing_student @student = @student.find params[:id] @student.build_student_fail params[:student][:student_fail_attribute] end

You don't appear to be *saving* the result from @student.build_student_fail. Either you're looking for create_student_fail (which saves the record) or something like:

def update_failing_student   @student = Student.find(params[:id])   @student_fail = @student.build_student_fail(params[:student] [:student_fail_attribute])   if @student_fail.save     # save succeeded   else     # save failed - re-render form with errors   end end

Even for this you have to put student_fail_attribute in the html. I'm hoping there's a way where you don't have to put anything in the html.

Not sure what you're looking for here: it's going to be hard to get a field from the user without asking for it...

--Matt Jones

Matt Jones wrote:

Doesn't make any difference - SomeModel.create(...) will work just as well in one controller as in another.

Fred

Frederick Cheung wrote:

Frederick Cheung wrote:

Doesn't make any difference - SomeModel.create(...) will work just as well in one controller as in another.

Even if it's a flash (adobe flex) form and not html form? The communication is done purely through http requests. For example, user clicks flash button, this triggers http put request, method is called in rails, data captured through the params function in rails, and thus data is subsequently updated to database.

Yes, that's the way the web works :slight_smile:

However, it's not like I can stick an attribute created using attr_accessor in that flash form.

?? Either you're passing the data you need to your controller via that request or you're not. Which is it?

Even if it's a flash (adobe flex) form and not html form?

A http request is a http request regardless of where it is submitted from. Start by making this work with a rails view, and then worry about the flash front end later. When you know what the http request actually needs to look like, then its easier drop the rails view and implement an external front end to replace it.